2013-02-04 222 views
1

我想用下面的代碼向我的緩衝區添加一個空終止符。但我似乎無法通過我的空終止符。這是做到這一點的正確方法嗎?當我使用緩衝區時,值爲10,但我只鎖定了9個字符。緩衝區空終止

char buffer[256]; 
int n; 

bzero(buffer,256); 
fgets(buffer,255,stdin); 
buffer[n-1]="\0"; 
+1

你算上9個字符中的換行符了嗎?而'n'未初始化。 –

+1

它或者是ommited或者缺少一些與'n = something'相符的東西。 – Oren

+1

'fgets()'自動添加終止的''\ 0''。 – pmg

回答

5

您指定的字符串不是字符而是 buffer[n-1] = "\0";
嘗試 buffer[n-1] = '\0'; 改爲。

+0

並初始化變量'n';) –

+0

是的,正如有人所說:不要忘記設置你的n變量,或者最好跳過它並使用'#define BUFFER_SIZE 256'代替硬編碼值。不要使用'bzero'它的廢棄,使用'memset'。 – Jite

+0

是的,順便說一句,* n *是什麼意思? –

0

你是右手價值有錯誤的類型(char *當需要轉換爲char東西時)。

正確的方法是:

buffer[n - 1] = '\0'; 

這本來也可能被寫成:

buffer[n - 1] = 0; 

但第一個清楚我們正在處理的字符。我認爲n也設置在某處。

如果buffer是一個數組,你要確保它的最後一個字符設置爲零,你可以使用:

buffer[sizeof buffer - 1] = '\0'; 

它使用sizeof操作,以避免重複和常量等。請注意,它只適用於buffer是適當的數組,如果你只有一個指針(char *buffer;)它不會做預期的事情。

+0

是的。我的n被設置爲讀取緩衝區。我試過使用sizeof,但我在sizeof前面得到了期望的標識符。所以我沒有繼續前進。 – user1823986

0
char buffer[256] = {'\0' }; 

解決了您的問題。