更新字符串

时间:2015-11-10 22:23:30

标签: c string pointers

如何更新声明为char的字符串中的单个char*

我试过这个:

int main(void)
{
    char* s = "hello";
    s[0] = 'y';
    printf("%s\n", s);
    return 0;
}

使用以下参数编译GCC 4.8.1(MinGW)时没有警告或错误:

gcc -Wall -Wextra -Werror -o str.exe str.c

但是当我运行应用程序时,它只打印一个空行?

1 个答案:

答案 0 :(得分:3)

您正在尝试修改字符串文字。它导致undefined behavior

相关,来自标准C11,章节§6.4.5,字符串文字

  

[..]如果程序试图修改这样的数组,行为是   未定义。

如果要修改内容,则需要使用char的数组。

的一些方面
char s[] = "hello";

否则,如果您想拥有char *s表单,则必须

  1. 将内存分配给s
  2. 使用strcpy()将内容复制到s
  3. 然后,您可以修改s,因为malloc()返回的内存位置是可写的。