【发布时间】:2016-02-08 22:11:15
【问题描述】:
我正在使用strchr 在缓冲区中查找遇到= 的点。然后我将那个相等的字符更改为M。我在尝试执行此操作的行出现段错误。
这是完整代码:
int main(void){
char *buffer = "Name=Tom"
char *pointer;
pointer = strchr(buffer,'=');
*pointer = 'M'; <--------- Segfault Occurs here
return (0);
}
我收到以下与段错误有关的错误:
Process terminating with default action of signal 11 (SIGSEGV)
Bad permissions for mapperd region at addresss .....
【问题讨论】:
-
请提供minimal complete and verifiable example。您甚至没有提供对问题至关重要的
buffer的定义和内容。例如,如果buffer包含一个字符串常量或不包含任何=字符,那么您将得到一个段错误。但是用你提供的不完整的代码是不可能的。 -
可能找不到字符'=',strchr返回NULL
-
-
@JohnDoe 现在您终于添加了代码,很明显(正如多人猜测的那样)您正在尝试更改字符串文字。字符串文字不可写。修改
buffer声明,使其改为 char 数组:char buffer[] = "Name=Tom"; -
@DavidHoelzer 我添加了完整的代码。
标签: c segmentation-fault