我是 c 的新手,我试图做一些简单的事情来学习字符串和字符数组,我被困在这段代码中。
const char *words(int count) {
char *words = "words";
if(count==1) {
words[strlen(words)-1] = ' ';// segmentation fault
}
return words;
}
它的作用是在计数等于 1 时返回单词,否则返回单词。我的问题是为什么这行代码有问题,为什么我不能将字符串视为字符数组
words[strlen(words)-1] = ' ';
我试图以不同的方式声明字符串(字符数组(,例如
char *words = {'w','o','r','d','s'};
但我仍然遇到分段错误。
ISO/IEC 9899:TC3 N1256
6.7.8 初始化 - 32,示例 8 声明
char s[] = "abc", t[3] = "abc";
定义"纯"字符数组对象 s 和 t,其元素是 使用字符串文本初始化。本声明是 与 相同
char s[] = { 'a', 'b', 'c', ' ' }, t[] = { 'a', 'b', 'c' };
数组的内容是可修改的。另一方面,宣言
char *p = "abc";
使用类型"指向字符的指针"定义 P,并将其初始化为指向 类型为"字符数组"且长度为 4 的对象,其元素为 使用字符串文本初始化。如果尝试 使用 p 修改数组的内容,行为是 未定义。
简而言之,您尝试修改声明为 char * words = "words"
的 words
指向的内容,并且字符串文字"words"
通常存储在只读部分中,这就是您获得 SEGSEV 的原因。