我想用下面的代碼向我的緩衝區添加一個空終止符。但我似乎無法通過我的空終止符。這是做到這一點的正確方法嗎?當我使用緩衝區時,值爲10,但我只鎖定了9個字符。緩衝區空終止
char buffer[256];
int n;
bzero(buffer,256);
fgets(buffer,255,stdin);
buffer[n-1]="\0";
我想用下面的代碼向我的緩衝區添加一個空終止符。但我似乎無法通過我的空終止符。這是做到這一點的正確方法嗎?當我使用緩衝區時,值爲10,但我只鎖定了9個字符。緩衝區空終止
char buffer[256];
int n;
bzero(buffer,256);
fgets(buffer,255,stdin);
buffer[n-1]="\0";
您指定的字符串不是字符而是 buffer[n-1] = "\0";
。
嘗試 buffer[n-1] = '\0';
改爲。
並初始化變量'n';) –
是的,正如有人所說:不要忘記設置你的n變量,或者最好跳過它並使用'#define BUFFER_SIZE 256'代替硬編碼值。不要使用'bzero'它的廢棄,使用'memset'。 – Jite
是的,順便說一句,* n *是什麼意思? –
你是右手價值有錯誤的類型(char *
當需要轉換爲char
東西時)。
正確的方法是:
buffer[n - 1] = '\0';
這本來也可能被寫成:
buffer[n - 1] = 0;
但第一個清楚我們正在處理的字符。我認爲n
也設置在某處。
如果buffer
是一個數組,你要確保它的最後一個字符設置爲零,你可以使用:
buffer[sizeof buffer - 1] = '\0';
它使用sizeof
操作,以避免重複和常量等。請注意,它只適用於buffer
是適當的數組,如果你只有一個指針(char *buffer;
)它不會做預期的事情。
是的。我的n被設置爲讀取緩衝區。我試過使用sizeof,但我在sizeof前面得到了期望的標識符。所以我沒有繼續前進。 – user1823986
char buffer[256] = {'\0' };
解決了您的問題。
你算上9個字符中的換行符了嗎?而'n'未初始化。 –
它或者是ommited或者缺少一些與'n = something'相符的東西。 – Oren
'fgets()'自動添加終止的''\ 0''。 – pmg