从C中的函数返回指针错误
我向一个带指针的函数发送了两个字符串,我希望其中一个在返回到主函数时会发生变化。但它只返回null,这是不应该的从C中的函数返回指针错误,c,function,pointers,C,Function,Pointers,我向一个带指针的函数发送了两个字符串,我希望其中一个在返回到主函数时会发生变化。但它只返回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
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;
}
我做错了什么 我认为应该使用指向指针的指针来更改指针,如下所示:
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;
}
您应该始终记住,C始终通过值而不是引用传递参数 例如,假设使用代码
char*str1=“一些随机输入”代码>
str1
保存一个内存位置,例如0x008000
调用function1(str1、str2)时
将str1
的存储位置复制到参数变量input
,其范围被限制在函数的范围内input
与str1具有相同的内容,但它们位于完全不同的内存位置。因此,通过更改输入
值,您不会影响str1
解决方法是使用双指针。(C++中,可以使用引用和“操作”)< /P>,当然,根本原因是本地函数参数的改变不会改变它的“原始”值。在C++中,有可能将函数参数标记为引用,但C没有这样的值。很抱歉立即编辑不要更改字符串文字。strtok以更改字符串。我听不懂你说的话,我不会用strtok更改任何内容?strtok(“一些随机输入”)
将“一些随机输入”
更改为“一些\0随机输入”
。更改字符串文字。UB.非常感谢您的详细解释:)