c - 为什么我可以使用 CLion 修改字符串文字?

标签 c string pointers char string-literals

#include <stdio.h>

int main() {
    char *name = "Thank you";
    name[0] = 'a';
    printf("%s", name);
}

它工作正常:

it works

我的理解是 name[0] = 'a' 不应该起作用。

那么它为什么有效?

最佳答案

C 标准对尝试修改字符串文字没有施加任何限制。但是,如果您尝试修改字符串文字,结果是 undefined behaviour .

引用 C11,第 6.4.5 章(字符串文字)/P7

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

您认为程序允许您修改字符串文字的内容这一事实是 UB 的众多结果之一。

关于c - 为什么我可以使用 CLion 修改字符串文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63915526/

相关文章:

c - 为什么局部变量结构在离开其范围时不重置?

c# - 使用 C# 在 WinForm 中托管的 ListBox 中添加和删除文本

c++ - C++ 中的 LPWSTR、wchar_t* 和无符号短指针

将 char** 转换为 char* 或 char

c - 为什么一个数字字符的 ASCII 值等于该值加上 '0'?

c++ - 范围解析和 this 运算符

c# - 在 Console.WriteLine 方法中格式化字符串

c++ - 比较 list<string> 和 vector<string> 中的字符串元素

c++ - 在 C++ 中引用 Sub Array 2D

c - 转换为 long double 的 Void 指针会产生垃圾