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

标签 c string function pointers c-strings

我在 main 中有一个 string,我想将该字符串的地址传递给一个函数,该函数将编辑该字符串的内容。我不想使用 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;
}

我不明白如何将字符串的第一个字母从 H 更改为 W

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

最佳答案

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

char* string_literal = "Hello";

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

如果将其声明为字符数组:

char string[] = "Hello";

然后你可以用数组索引符号修改string的内容:

string[0] = "W";

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

string_literal = "New string literal";

因为这里您实际做的是重新分配名为“string_literal”的指针以指向内存中的另一个地址。指针本身是可写的,但它指向的内存是只读的。这就是您对 para1 的分配成功的原因。

关于C:如何在不使用 malloc 的情况下编辑函数中的 C 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39651677/

相关文章:

c - C 中的 strcat 错误

javascript - 将自执行 JavaScript 函数放入 'normal' 函数中

c - 在 sprintf 中转义

php - PHP输出和C输出与相同的代码不匹配

c++ - 如何通过 Windows Winsock send() 发送包含指针的结构?

javascript - AngularJS : Functions in Service doesn't work

c# - 如何访问命名空间中的函数

python - 尝试将 XTea 加密算法从 C 移植到 Python

string - 拆分文本列

python - 正则表达式:匹配单词中未知数量字母的更好方法