此问题已在此处有答案:
How to change value of variable passed as argument?(4个答案)
5年前关闭。
如何修改函数中作为参数传递的字符串的值?
例如,我有这个函数foo
(应该将return_string
的值从"old string"
更改为"new string"
):
int foo(char *return_string) {
char *tmp = "new string";
return_string = tmp;
return 0;
}
但是如果我用下面的方式调用它:
char *s = "old string";
foo(s);
printf("%s\n", s);
我仍然得到old string
作为输出。为什么?
我承认我对C中的指针和字符串有点混淆。
3条答案
按热度按时间zi8p0yeb1#
问题
在函数
foo()
中:您只是将指针
tmp
赋值给指针return_string
。参数return_string
通过值传递给foo()
(i.即:它是调用者传递的内容的副本)。return_string
所指向的内容(可能是您想要的内容)和传递的指针都没有被修改。strcpy()
请考虑使用
strcpy()
:这将修改
return_string
所指向的字符串的内容。引用传递指针
通过引用传递指针,可以修改指向字符串的指针:
2ul0zpep2#
您正在按值传递指针。需要通过引用传递指针。
更改函数接口以传递
char** return_string
而不是char* return_string
。然后执行*return_string = tmp;
。omjgkv6w3#
如果您的字符串是动态分配的,则可以按如下方式实现