我正在使用strchr
在缓冲区中找到遇到=
的点。然后我将那个相等的角色改为M
。我在尝试执行此操作的行中遇到了段错误。
这是 FULL 代码:
int main(void){
char *buffer = "Name=Tom"
char *pointer;
pointer = strchr(buffer,'=');
*pointer = 'M'; <--------- Segfault Occurs here
return (0);
}
我在segfault中遇到以下错误:
Process terminating with default action of signal 11 (SIGSEGV)
Bad permissions for mapperd region at addresss .....
答案 0 :(得分:7)
您没有检查strchr
的返回值,它可能是NULL
,因为我们看不到您的输入。
除此之外,buffer
在哪里以及如何宣布?并非所有char*
都可以修改,因为它们可以存储在二进制文件的数据段中(作为字符串文字)。
答案 1 :(得分:3)
您正在尝试修改将存储在只读内存段中的字符串文字的值。这会导致访问冲突。
问题在于:
$
将其修改为:
char *buffer = "Name=Tom";
答案 2 :(得分:0)
你在这做什么是错的:
char *buffer = "Name=Tom";
当您将字符串文字指定给指针时,它将存储为const char*
,无法修改,这是您稍后在代码中尝试执行的操作。
在这里,您首先需要为buffer
分配内存,然后使用strcpy
复制内容,如:
char buffer[100];
strcpy(buffer, "Name=Tom");