我想把cstring传递给一个函数并覆盖它。
#include <stdio.h>
void changeStr(char* str1)
{
str1 = "foo";
}
int main()
{
char* aStr = "abc123";
printf("%s\n", aStr);
changeStr(aStr);
printf("%s\n", aStr);//aStr is still the same :(
return 0;
}
我试着把a
&
放在aStr前面,把*
放在str1前面,但是程序崩溃了。为什么这不管用?下面的理由不一样吗? 最佳答案
你可以这样做:
#include <stdio.h>
void changeStr(const char** str1)
{
*str1 = "foo";
}
int main()
{
const char* aStr = "abc123";
printf("%s\n", aStr);
changeStr(&aStr);
printf("%s\n", aStr);//aStr is still the same :(
return 0;
}
在这里:
void changeStr(char* str1) {
str1 = "foo";
}
str1
是一个包含"abc123"
地址的复制值,因此对它的任何更改都将在函数的作用域内。你需要修改指针本身的值,地址的持有者,所以它指向"foo"
,这就是为什么你需要传递char **
,指针到指针。关于c - 传递cstring作为参数,以便可以覆盖它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19736425/