C-字符的数组初始化产生分割故障



以下代码在汇编过程中产生分段故障:

(GDB)运行
启动程序:/home/anna/desktop/a.out
程序收到信号sigsegv,分段故障。
0xb7e97845在strtok()中,来自/lib/i386-linux-gnu/libc.so.6

#include <string.h>
#include <stdio.h>
main () {
char * sentence = "This is a sentence.";
char * words[200] ;
words[0] = strtok(sentence," ");
}

更改第五行后,没有丢弃错误。

#include <string.h>
#include <stdio.h>
main () {
char  sentence[] = "This is a sentence.";
char * words[200] ;
words[0] = strtok(sentence," ");
}

为什么会发生?

char * sentence = "This is a sentence.";

sentence是指向字符串文字的指针,"这是句子。" 仅存储在读取内存中,您不应修改它。
以任何方式修改字符串的字符字会导致未定义的行为,在您的情况下,它表现在分段故障中。

好阅读:
char a [] =?字符串有什么区别?和char *p =?string?;?

阅读 strtokman页(错误部分),

  • 这些功能修改了他们的第一个参数。
  • 这些功能不能在恒定字符串上使用。

char *sentence = "This is a sentence";在仅阅读上下文中分配,因此被视为contant。

相关内容

  • 没有找到相关文章

最新更新