取消引用char指针会导致段错误

时间:2016-02-08 22:11:16

标签: c segmentation-fault

我正在使用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 .....

3 个答案:

答案 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");