我正在向带有指针的函数发送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;
}
我在这里做错了什么?
答案 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
,其范围在功能范围内受到限制当然。 input
与str1
具有相同的内容,但它们位于完全不同的内存位置。因此,通过更改input
值,您不会影响str1
。
解决方案是使用双指针。 (在C ++中,您可以使用&运算符引用调用)