C - 没有使用参数指针获得正确的值

时间:2011-01-27 04:25:51

标签: c function pointers

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;
}

3 个答案:

答案 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"