我將消息結構的內容編碼到緩衝區中。處理空字符串輸入導致分段錯誤
int encode(const struct message *msg, unsigned char *buffer, size_t max_size)
{
if (buffer == NULL)
return -1;
unsigned char *buf_pos = buffer;
unsigned char *ep = buffer + max_size;
if (buf_pos + 1 <= ep) {
*buf_pos++ = SYNC_WORD_1;
} else {
return buf_pos - buffer;
}
.
.
.
}
當我打電話encode(&message, "", 1024);
我遇到分段錯誤預期。我的理解是,段錯誤是由嘗試訪問未分配給程序的內存引起的,因爲""
將只包含空終止符,並且我將它傳遞給指針。
我遇到的問題是當我嘗試處理這個錯誤。我還沒有找到一種方法來識別無效輸入,該輸入不會導致有效輸入或其他段錯誤的誤報。
那麼,清除這種輸入的正確方法是什麼?
'strlen(buffer)== 0' –
一般來說,沒有辦法解決知道有多少內存以及它是否可寫的問題,它們存在於某個內存位置。 –
'當我調用encode(&message,「」,1024); '第二個參數是一個字符串常量,不能被寫入。你的'* buf_pos ++ = SYNC_WORD_1;'試圖寫入它。 – joop