2013-02-04 191 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' }; 

解决了您的问题。