首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字符初始化数组会产生分段错误。

字符初始化数组会产生分段错误。
EN

Stack Overflow用户
提问于 2012-12-20 11:37:50
回答 2查看 317关注 0票数 1

以下代码在编译过程中会产生分段错误:

(gdb)运行

启动程序: /home/anna/Desktop/a.out

程序接收信号SIGSEGV,分割故障。

来自/lib/i 386-linux-gnu/libc.so.6的strtok ()中的0xb7e97845

代码语言:javascript
运行
复制
#include <string.h>
#include <stdio.h>

main () {
char * sentence = "This is a sentence.";
char * words[200] ;
words[0] = strtok(sentence," ");
}

更改第5行后,不会引发任何错误。

代码语言:javascript
运行
复制
#include <string.h>
#include <stdio.h>

main () {
char  sentence[] = "This is a sentence.";
char * words[200] ;
words[0] = strtok(sentence," ");
}

为什么会发生这种情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-20 12:02:08

阅读man页面的strtok (BUGS部分),

  • 这些函数修改了它们的第一个参数。
  • 这些函数不能用于常量字符串。

char *sentence = "This is a sentence";是在只读上下文中分配的,因此被视为内容。

票数 2
EN

Stack Overflow用户

发布于 2012-12-20 11:39:29

代码语言:javascript
运行
复制
char * sentence = "This is a sentence.";

sentence是指向字符串文字“这是一个句子”的指针。存储在只读内存中,不应该对其进行修改。

以任何方式修改字符串文本都会导致未定义的行为,在您的情况下,它表现为分段错误。

好读:

p = ?string?;?

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13971372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档