在C中删除字符串终止符并添加换行符

在C中删除字符串终止符并添加换行符,c,c99,C,C99,我试图创建一个函数,该函数删除字符串终止符,并向字符串中添加换行符。我这样做会导致一个错误。我无法理解为什么我的字符串是不可变的,以及如何使它与我的实现一起工作。非常感谢你的帮助 int main () { char* value = "message"; value[7] = '\n'; int success = write(1, value, 7); if (success == -1) { printf("write failed");

我试图创建一个函数,该函数删除字符串终止符,并向字符串中添加换行符。我这样做会导致一个错误。我无法理解为什么我的字符串是不可变的,以及如何使它与我的实现一起工作。非常感谢你的帮助

int main () {
    char* value = "message";
    value[7] = '\n';
    int success = write(1, value, 7);
    if (success == -1) {
        printf("write failed");
    }
}

由于奇怪的历史原因,C字符串是不可变的,实际上是
char const[]
,看起来像
char[]

如果需要可变字符串,请从字符串文字初始化字符数组:

char value[] = "message"; //autosized

“message”
(您的
值所指向的)是一个由8个只读字符组成的数组。你不能改变任何一个。将它们复制到本地数组(根据用户3121023的建议)以便能够更改它们。您应该使用
-Wall
(或者
-Wextra
)从GCC获得警告。我不记得microsoft编译器是否警告过它。这些无数的重复项在哪里?,,等等。可能重复的“C字符串是不可变的”-->你是说“字符串文字是不可变的”吗?详细地说,即使是字符串文字也是可变的——可能是。试图改变它们是不可能的——可能有效,也可能无效。