1

我误解了 getcwd 手册页中这句话的哪一部分?

   char *getcwd(char *buf, size_t size);
   ...
   As  an  extension  to  the  POSIX.1-2001 standard, Linux (libc4, libc5,
   glibc) getcwd() allocates the buffer dynamically using malloc(3) if buf
   is NULL.  In this case, the allocated buffer has the length size unless
   size is zero, when buf is allocated as big as  necessary.   The  caller
   should free(3) the returned buffer.

因为

 21         char * buffer = NULL;
 22         size_t bufferSize = 0;
 23         getcwd(buffer, bufferSize);
 24         printf("%s\n", buffer);

在第 24 行导致 Seg-Fault 并且 gdb 的回溯告诉我缓冲区 = 0x0?

编辑:

 getcwd(buffer, bufferSize);

无论出于何种原因仍然无法正常工作,但是

 buffer = getcwd(NULL, 0);

4

2 回答 2

1

您错过了 C 仅按值调用;不通过引用调用:

getcwd(buffer, bufferSize);

不能改变指针buffer(只有指向的东西buffer,但因为它是NULL......)。这就是为什么您需要使用(this non-standard version of)返回getcwd的值。

您还错过了阅读该手册页的 RETURN VALUE 部分,或者误解了引用的部分,它说调用者应该释放(3)返回的缓冲区。:-)

于 2014-10-10T09:24:02.900 回答
0

它应该是:

 printf("%s\n", buffer);

因为%s需要 a char*,而不是 a char

如果您有警告,您会知道这一点。

于 2014-10-10T08:45:37.827 回答