我可以通过函数更改初始化的char指针吗?

时间:2017-01-07 21:30:29

标签: c pointers

这是我的main.c

#include <stdio.h>

void changeStuff(char *stuff){
    stuff=  "Hello everyone";
}

int main(int argc, char **argv) {
    char *stuff;
    changeStuff(stuff);
    printf(stuff);
    return 0;
}

当我构建这个时,我收到了这个警告:

warning: ‘stuff’ is used uninitialized in this function [-Wuninitialized]

当我运行此程序时,没有打印任何内容。

由于在声明之后似乎无法定义没有值的char*,如何更改传递给函数的char*的值?

1 个答案:

答案 0 :(得分:3)

在C中,函数参数是按值传递的。要修改指针值,需要将指针传递给指针,如:

#include <stdio.h>

void changeStuff(char **stuff){
    *stuff=  "Hello everyone";
}

int main(int argc, char **argv) {
    char *stuff;
    changeStuff(&stuff);
    printf("%s\n", stuff);
    return 0;
}

请注意,将用户定义的值直接传递给printf()并不是一个好主意。请参阅:How can a Format-String vulnerability be exploited?