字符串作为 c 中的数组



我是 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 的原因。

相关内容

  • 没有找到相关文章