Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 缓冲区空终止_C - Fatal编程技术网

C 缓冲区空终止

C 缓冲区空终止,c,C,我试图用下面的代码向缓冲区添加一个空终止。但我似乎无法传递空终止符。这是正确的方法吗?当我设置缓冲区时,值是10,但我只输入了9个字符 char buffer[256]; int n; bzero(buffer,256); fgets(buffer,255,stdin); buffer[n-1]="\0"; 您正在分配一个字符串,而不是带有 缓冲区[n-1]=\0;。 尝试 缓冲区[n-1]='\0'; 相反。您分配的是一个字符串,而不是带有 缓冲区[n-1]=\0;。 尝试 缓冲区[n-1

我试图用下面的代码向缓冲区添加一个空终止。但我似乎无法传递空终止符。这是正确的方法吗?当我设置缓冲区时,值是10,但我只输入了9个字符

char buffer[256];
int n;

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

您正在分配一个字符串,而不是带有 缓冲区[n-1]=\0;。 尝试 缓冲区[n-1]='\0';
相反。

您分配的是一个字符串,而不是带有 缓冲区[n-1]=\0;。 尝试 缓冲区[n-1]='\0';
相反。

当需要转换为char的内容时,右边的值的类型char*错误

正确的方法是:

buffer[n - 1] = '\0';
这也可以写成:

buffer[n - 1] = 0;
但第一条很清楚,我们是在处理角色。我假设n也设置在某个地方

如果缓冲区是一个数组,并且要确保其最后一个字符设置为零,则可以使用:

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

这使用sizeof操作符来避免重复常量等。注意,只有当buffer是一个合适的数组,并且只有一个指针char*buffer时,它才起作用;它不会做预期的事情。

当需要转换为char的内容时,右边的值具有错误的char*类型

char buffer[256] = {'\0' };
正确的方法是:

buffer[n - 1] = '\0';
这也可以写成:

buffer[n - 1] = 0;
但第一条很清楚,我们是在处理角色。我假设n也设置在某个地方

如果缓冲区是一个数组,并且要确保其最后一个字符设置为零,则可以使用:

buffer[sizeof buffer - 1] = '\0';
这使用sizeof操作符来避免重复常量等。注意,只有当buffer是一个合适的数组,并且只有一个指针char*buffer时,它才起作用;它不会做预期的事情

char buffer[256] = {'\0' };
修复您的问题


修复您的问题。

您是否将换行符计算在9个字符中?n未初始化。它可能是ommited,也可能是沿着n=something的行丢失了某些内容。fgets自动添加终止的“\0”。请注意,\0和“\0”是不同的东西!非常感谢。我没有意识到我实际上是以字符串结尾的。你把这条新线算在9个字符中了吗?n未初始化。它可能是ommited,也可能是沿着n=something的行丢失了某些内容。fgets自动添加终止的“\0”。请注意,\0和“\0”是不同的东西!非常感谢。我没有意识到我实际上是以字符串终止的,并初始化变量n;是的,正如有人所说:不要忘记设置n变量,或者最好跳过它,使用define BUFFER_SIZE 256而不是硬编码的值。不要使用bzero,因为它已被弃用,请使用memset。是的,顺便问一下,n是什么?我希望他只是遗漏了代码的这一部分,否则肯定!缓冲区[x]=\0;行应该显示一个非常可怕的警告赋值,从指针生成整数而不使用cast,并初始化变量n;是的,正如有人所说:不要忘记设置n变量,或者最好跳过它,使用define BUFFER_SIZE 256而不是硬编码的值。不要使用bzero,因为它已被弃用,请使用memset。是的,顺便问一下,n是什么?我希望他只是遗漏了代码的这一部分,否则肯定!缓冲区[x]=\0;这行应该显示一个非常可怕的警告,从指针赋值为整数,不带castyes。my n设置为读取缓冲区。我尝试使用sizeof,但在sizeof前面得到了预期的标识符。所以我没有继续,是的。my n设置为读取缓冲区。我尝试使用sizeof,但在sizeof前面得到了预期的标识符。所以我没有继续。