2013-03-23 112 views
0

我正在開發一個應用程序,其中我遇到了包含多個'\ 000'之間的終止字符的字符串。我想要字符串中的空字符。 作爲處理這個時,字符串終止於'\ 000',所以我想增加它的ASCII值。但是當我這樣做時,我得到了分段錯誤。在字符串中用增加的ASCII值處理多個' 000'

我有以下爲

char *content; 
content = malloc(8); 
content = "\037\000\000\000\000\037\037\037"; 
int content_length = 8; 
content[1] = content[1] + 1; // Increasing the ASCII value 

這裏如果我刪除這增加了ASCII碼值的最後一行,我只得到1個字節在我的應用程序收到寫入代碼段。所以改變了第二個字節(內容[1]),然後應該傳輸2個字節,但是我得到了分段錯誤。

我做錯了什麼?十六進制或八進制數字是否做出這樣的事情?

感謝

回答

1

您需要創建存儲。無論是初始化數組與它:

char content[] = "\037\000\000\000\000\037\037\037"; 

或者,如果你想使用malloc而不是一個數組,你可以使用memcpy複製字節的確切數字:

memcpy(content, "\037\000\000\000\000\037\037\037", 8); 
3
"\037\000\000\000\000\037\037\037" 

是一個字符串文字。字符串文字在C中是不可修改的。寫入字符串文字是未定義的行爲。

然後:

content = malloc(8); 
content = "\037\000\000\000\000\037\037\037"; 

你從malloc一些內存,但你要覆蓋指針對象,使它指向elsewehere(字符串文字),這就是所謂的一個內存泄露

1

我做錯了什麼?

當然。首先,您將content指針重新分配給其他內容,實際上泄漏了分配的內存。

其次,引號之間的字符串是字符串文字,其內容不能被修改。你的程序調用未定義的行爲。