簡體   English   中英

取消引用char指針會導致segfault

[英]Dereferencing char pointer causes segfault

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

您沒有檢查strchr的返回值,因為我們看不到您的輸入,所以它可能為NULL

除此之外,在何處以及如何聲明buffer 並非所有char*都可以修改,因為它們可以存儲在二進制數據段中(作為字符串文字)。

您正在嘗試修改將存儲在只讀存儲器段中的字符串文字的值。 這會導致訪問沖突。

問題在這里:

char *buffer = "Name=Tom";

修改為:

char buffer[] = "Name=Tom";

您在這里所做的事情是錯誤的:

char *buffer = "Name=Tom";

當您將字符串文字分配給指針時,它會存儲為const char* ,無法修改,這是您稍后在代碼中要嘗試的操作。

在這里,您首先需要分配內存到buffer ,然后使用strcpy復制內容,例如:

char buffer[100];
strcpy(buffer, "Name=Tom");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM