这段代码抛出赛格fault.Please帮我鉴定相同为什么这个代码片段给分段错误
#include<stdio.h>
int main() {
char* str;
str = "abcd";
str[0] = 'r';
printf("%c\n" , str[0]);
return 0;
}
感谢
这段代码抛出赛格fault.Please帮我鉴定相同为什么这个代码片段给分段错误
#include<stdio.h>
int main() {
char* str;
str = "abcd";
str[0] = 'r';
printf("%c\n" , str[0]);
return 0;
}
感谢
井C FAQ 1.32解释了原因。修改字符串文字是非法的。
6.4.5/6
它是unspeci音响ED这些阵列是否是不同的条件是它们的 元素具有适当的值。如果该程序尝试 修改这样一个数组,行为是不确定的。
str = "abcd";
str[0] = 'r';
这种尝试修改字符串文字。官方,这是未定义的行为。然而,在大多数现代系统中,存储器存储字符串文字将被标记为只读,因此试图修改它们会导致错误。
这类似于Question有关分段错误
请参阅此获取更多信息。
感谢您对此进行了详细的说明和解答,C FAQ绝对是一个宝藏 – Rajan