我想用下面的代码向我的缓冲区添加一个空终止符。但我似乎无法通过我的空终止符。这是做到这一点的正确方法吗?当我使用缓冲区时,值为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