从C中的函数返回指针错误

时间:2013-12-27 22:49:42

标签: c function pointers

我正在向带有指针的函数发送2个字符串,我希望其中一个字符串在返回main函数时会发生变化。但它只返回null,因为它不应该。

int main (){
...
char *str1="SOME RANDOM INPUT";
char *str2=NULL;
function1 (str1, str2);
...
}

void function1 (char mystr, char *output){
 char *input = strtok(mystr, " ");
 if (input != NULL)
      output = input;

 return;
}

我在这里做错了什么?

2 个答案:

答案 0 :(得分:4)

我认为你应该使用指针指针来改变指针,就像那样:

int main (){
...
char *str1="SOME RANDOM INPUT";
char *str2=NULL;
function1 (&str1, &str2);
...
}

void function1 (char **input, char **output){
 ...
 if (*input != NULL)
      *output = *input;

 return;
}

答案 1 :(得分:2)

您应该始终记住C,始终按值而不是通过引用传递参数。

显示例如假设使用代码

char *str1="SOME RANDOM INPUT";

str1拥有内存位置,例如0x008000

当您致电function1 (str1, str2);时,str1的内存位置将复制到参数变量input,其范围在功能范围内受到限制当然。 inputstr1具有相同的内容,但它们位于完全不同的内存位置。因此,通过更改input值,您不会影响str1

解决方案是使用双指针。 (在C ++中,您可以使用&运算符引用调用)