以下代码在编译过程中会产生分段错误:
(gdb)运行
启动程序: /home/anna/Desktop/a.out
程序接收信号SIGSEGV,分割故障。
来自/lib/i 386-linux-gnu/libc.so.6的strtok ()中的0xb7e97845
#include <string.h>
#include <stdio.h>
main () {
char * sentence = "This is a sentence.";
char * words[200] ;
words[0] = strtok(sentence," ");
}
更改第5行后,不会引发任何错误。
#include <string.h>
#include <stdio.h>
main () {
char sentence[] = "This is a sentence.";
char * words[200] ;
words[0] = strtok(sentence," ");
}
为什么会发生这种情况?
发布于 2012-12-20 12:02:08
阅读man
页面的strtok
(BUGS部分),
char *sentence = "This is a sentence";
是在只读上下文中分配的,因此被视为内容。
发布于 2012-12-20 11:39:29
char * sentence = "This is a sentence.";
sentence
是指向字符串文字“这是一个句子”的指针。存储在只读内存中,不应该对其进行修改。
以任何方式修改字符串文本都会导致未定义的行为,在您的情况下,它表现为分段错误。
好读:
https://stackoverflow.com/questions/13971372
复制相似问题