Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C中的函数返回指针错误_C_Function_Pointers - Fatal编程技术网

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

从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

我向一个带指针的函数发送了两个字符串,我希望其中一个在返回到主函数时会发生变化。但它只返回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.非常感谢您的详细解释:)