我使用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 .....发布于 2016-02-08 22:14:19
您没有检查strchr的返回值,它可能是NULL,因为我们没有看到您的输入。
除此之外,buffer是在哪里以及如何声明的?并不是所有的char*都可以修改,因为它们可以存储在二进制文件的数据段中(作为字符串文本)。
发布于 2016-02-08 22:47:54
您正在尝试修改字符串文本的值,该字符串文本将存储在只读内存段中。这会导致访问冲突。
问题在于:
char *buffer = "Name=Tom";修改为:
char buffer[] = "Name=Tom";发布于 2016-02-08 22:50:18
你在这里做的是错的:
char *buffer = "Name=Tom";当您将字符串文本赋值给指针时,它被存储为const char*,不能修改,这就是以后在代码中要做的事情。
在这里,您首先需要将内存分配给buffer,然后使用strcpy复制以下内容:
char buffer[100];
strcpy(buffer, "Name=Tom");https://stackoverflow.com/questions/35280341
复制相似问题