c - 正确使用 malloc

标签 c unix getcwd

我正在尝试将我的目录路径名放在一个字符串变量上,如下所示:

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。即 mallocchar 为单位分配.所以我省略了空操作。

关于c - 正确使用 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623648/

相关文章:

c - 如何查找给定地址是在堆中还是在堆栈中

c++ - 动态链接 :change of the linking path

Python os.getcwd() 在路径中返回波浪号。例如C :\MYFOLD~1\test

python - 通过符号链接(symbolic link)启动 python 脚本

python - 调试python时的vscode工作目录

c - 为什么 select() 调用会超时?在常见场景中它的合理值是多少?

c - C语言中*a = *b是什么意思?

c - C 的 pow() 函数如何在不损失任何精度的情况下输出 2^1023 的精确值?

linux - 在 Linux 上的 vi 编辑器中查找并替换字符串?

使用 sockaddr_storage 从 IP 版本独立创建和连接套接字