首页 > 解决方案 > 为什么我可以使用 CLion 修改字符串文字?

问题描述

#include <stdio.h>

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

它工作正常:

有用

我的理解是这name[0] = 'a'应该行不通。

那么它为什么有效呢?

标签: cstringpointerscharstring-literals

解决方案


C 标准对尝试修改字符串文字没有任何限制。但是,如果您尝试修改字符串文字,结果是未定义的行为

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

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

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


推荐阅读