我正在尝试将我的目录路径名放在一个字符串变量上,如下所示:
int main(int ac, char **av)
{
char*dir;
if(ac > 2)
{
dir = malloc(sizeof(*dir) * 512);
getcwd(dir, sizeof(*dir));
printf("dat dir is:\n");
printf("%s\n", dir);
}
}
我打印了一个空白,但是当我做类似的事情时
int main(int ac, char **av)
{
char dir[512];
if(ac > 2)
{
// dir = malloc(sizeof(dir) * 512);
getcwd(dir, sizeof(dir));
printf("dat dir is:\n");
printf("%s\n", dir);
}
}
打印正常,为什么?我的第一个 malloc 不是应该让我的变量像 dir[512]
最佳答案
在
getcwd(dir, sizeof(*dir))
sizeof
正在生成 1 因为 *dir
指单个char
.这不是你想要的。如果将其替换为 512,一切都应该可以正常工作。
惯用的编码应该是这样的:
int main(int ac, char **av)
{
const int buf_size = 512;
char *dir;
if(ac > 2)
{
dir = malloc(buf_size);
getcwd(dir, buf_size);
printf("dat dir is:\n");
printf("%s\n", dir);
}
}
注意乘以 sizeof(*dir)
是空操作,因为它总是返回 1。即 malloc
以 char
为单位分配.所以我省略了空操作。
关于c - 正确使用 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623648/