[英]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.