c - 更新字符串的单个字符

标签 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

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

最佳答案

您正在做的是尝试修改字符串文字。结果为 undefined behavior .

相关,来自标准 C11,章节 §6.4.5,String literals

[..] If the program attempts to modify such an array, the behavior is undefined.

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

char s[] = "hello";

否则,如果你想拥有 char *s 形式,你必须

  1. 分配内存给s
  2. 使用strcpy()将内容复制到 s

然后,您可以修改s,因为malloc() 返回的内存位置将是可写的。

关于c - 更新字符串的单个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640812/

相关文章:

python - 如何使用正向后行断言从单词 "named"之后的字符串中提取子字符串

c++ - 将变量的指针作为基于模板的参数传递

c++ - C++ 中的 "new"关键字有什么问题?

c - 我很难使用 GTK 绘制文本

javascript - 如何在保持分隔符的同时根据空格或符号拆分字符串?

c - 填充数组为空 - 中止陷阱 :6

java - 在 Java Android 中将字符串文本设为粗体

c++ - 为动态分配的指针数组的所有元素赋值?

c - 读取文件和操作队列

c++ - XShm 完成事件未设置显示文件描述符