c++ - 在函数中包装 C block 。初学者问题

标签 c++ c function getcwd

我找到了获取当前工作目录的 C 代码片段 from here .本质上,代码是:

char directory[_MAX_PATH];
getcwd(directory, sizeof(directory))

我想将它抽象为另一个函数,放在不同的文件中(这样它就可以在必要时在不同的平台上换出)。

目前,我在外部文件中有

void getCurrentDirectory(char *directory) {
    getcwd(directory, sizeof(directory));
}

在主文件中

char directory[100];
getCurrentDirectory(directory);
printf("%s", *directory);

但是,当打印到屏幕时,我得到了废话(可能试图将内存位置打印为字符串?)

我敢肯定,对于非初学者来说,这是显而易见的事情。怎么回事?

编辑:我在 Windows 7 上,顺便说一句

谢谢。

最佳答案

这里有很多地方你做错了:

void getCurrentDirectory(char *directory) 
  {
      getcwd(directory, sizeof(directory));
  }

错误 1:

`sizeof(directory)` 

为您提供指针的大小,准确地说,是 char *。您的意图是传递数组的大小,而不是指针大小。

错误 2:

`printf("%s", *directory);` 

将数组的第一个元素而不是数组的地址传递给 printf。您的意图是打印整个数组,而不仅仅是第一个元素。

更正的解决方案

你应该做的

void getCurrentDirectory(char *directory, size_t arrSize)  
{                                         ^^^^^^^^^^^^^^
    getcwd(directory, arrSize);
}

数组的大小是显式传递的,因此函数可以直接使用它。

在主要的同时打印数组的内容:

   printf("%s", directory);

关于c++ - 在函数中包装 C block 。初学者问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6099699/

相关文章:

c++ - 使用 TCP 连接从 HTTP 服务器获取数据,在极少数情况下会出现垃圾数据

c++ - 自动分离已相乘的两个图像

c - 实现AI指针错误

c++ - 是否从 C++ 中的 for 循环不良做法返回函数值?

c - 无法将结构传递给 C 中的线程函数

function - 在模块中包含的函数中添加类型

c++ - 将 std::find 与谓词一起使用

c++ - void main() 有什么问题?

c - 计算阶乘时的长格式处理

c - free() 崩溃程序 : No source available for "ntdll! RtlpNtEnumerateSubKey()