get_current_path函数获取指向当前工作目录的char字符串的指针。 printf(“%s \ n”,buf);在函数本身打印正是我想要的,但然后在函数外,printf(“%s”,thisbuf);给了我很多垃圾。我想我在这里犯了一些愚蠢的错误,但我无法弄清楚它是什么。
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>
int get_current_path(char *buf) {
long cwd_size;
char *ptr;
cwd_size = pathconf(".", _PC_PATH_MAX);
if ((buf = (char *) malloc((size_t) cwd_size)) != NULL)
ptr = getcwd(buf, (size_t)cwd_size);
else cwd_size == -1;
printf("%s\n", buf);
printf("%ld\n", cwd_size);
return cwd_size;
}
int main (int argc, char **argv)
{
char *thisbuf;
get_current_path(thisbuf);
printf("%s", thisbuf);
return 0;
}
答案 0 :(得分:5)
您应该将指针传递给char *
int get_current_path(char **buf)
{
*buf = ...;
}
int main()
{
char *thisbuf;
get_current_path(&thisbuf);
}
答案 1 :(得分:4)
请改为尝试:
int get_current_path(char **buf) {
*buf = something; // Set buf with indirection now.
和
int main (int argc, char **argv)
{
char *thisbuf;
get_current_path(&thisbuf);
printf("%s", thisbuf);
return 0;
}
您试图将buf的副本传递给get_current_path,因此当修改buf时,未修改指向buf的原始指针。
答案 2 :(得分:4)
C中的参数是按值传递,这意味着get_current_path
无法更改调用者传入的“thisbuf”的值。
要进行更改,您必须传入指向“thisbuf”的指针:
int get_current_path(char **resultBuf) {
char *buf = (char *) malloc((size_t) cwd_size);
...
*resultBuf = buf; // changes "thisbuf" in the caller
}
....
get_current_path(&thisbuf); // note - passing pointer to "thisbuf"