C:如何在不使用malloc的情况下编辑函数中的C字符串

Mon*_*nil 1 c string pointers function c-strings

我有一个stringin main,我想将该字符串的地址传递给一个将编辑该字符串内容的函数.我不想使用malloc.

我的代码目前看起来像这样:

int main(){
        char* str = "Hello";
        char* para1[] = {"Tea", "Coffee"};

        printf("str: %s\n para1: %s\n", str, para1[0]);

        my_func(str, &para1);

        printf("str: %s\n para1: %s\n", str, para1[0]);

        return 1;
}

int my_func(char* str, char** para1){
        printf("str: %s\n", str);
        str[0] = 'W';
        para1[0] = "Popcorn";

        return 1;
}
Run Code Online (Sandbox Code Playgroud)

我不明白如何将字符串的第一个字母更改HW

你能解释一下我做错了什么吗?

Dav*_*vid 5

字符串文字是只读的.当你定义:

char* string_literal = "Hello";
Run Code Online (Sandbox Code Playgroud)

您将获得一个指向驻留在只读内存中的文本"Hello"的指针.

如果将其声明为char数组:

char string[] = "Hello";
Run Code Online (Sandbox Code Playgroud)

然后你可以修改string数组索引表示法的内容:

string[0] = "W";
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用指向另一个字符串文字的指针替换指向字符串文字的指针.例如,

string_literal = "New string literal";
Run Code Online (Sandbox Code Playgroud)

因为在这里你实际上正在做的是重新分配名为" string_literal" 的指针指向内存中的另一个地址.指针本身是可写的,但它指向的内存是只读的.这就是你对para1的任务成功的原因.