我想把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/

10-15 14:27