来自getcwd man-page的这句话的哪一部分我误解了?
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' s回溯告诉我buffer = 0x0?
修改
getcwd(buffer, bufferSize);
无论出于何种原因仍然无法工作,但
buffer = getcwd(NULL, 0);
确实
答案 0 :(得分:1)
你错过了C只能按值调用;不参考:
getcwd(buffer, bufferSize);
可以不更改指针buffer
(仅buffer
指向的内容,但因为它是NULL
...)。这就是为什么你需要使用返回的值(这个非标准版本的)getcwd
。
您还错过了阅读该手册页的返回值部分或错误解释了引用的部分调用者应该释放(3)返回的缓冲区。: - )
答案 1 :(得分:0)
应该是:
printf("%s\n", buffer);
因为%s
需要char*
,而不是char
。
如果您有警告,您就会知道这一点。