C 为什么我能';看不到数组中的最后一个字符是空终止符吗?
如何检查C 为什么我能';看不到数组中的最后一个字符是空终止符吗?,c,arrays,loops,null,null-terminated,C,Arrays,Loops,Null,Null Terminated,如何检查char数组是否以null结尾 char input[80]; fgets(input, sizeof(input), stdin); for (i = 0; input[i]; i++) { if (input[i] == '\0') { printf("null!!!"); // never works } } 例如,下面的代码没有在循环条件下的中打印null,您已经在检查input[i]的非0值,因此内部if是死区 要进行测试,请做一个无限循环,
char
数组是否以null结尾
char input[80];
fgets(input, sizeof(input), stdin);
for (i = 0; input[i]; i++)
{
if (input[i] == '\0') {
printf("null!!!"); // never works
}
}
例如,下面的代码没有在
循环条件下的中打印null,您已经在检查input[i]
的非0值,因此内部if
是死区
要进行测试,请做一个无限循环,检查if
,然后打印并break
out。差不多
for (i = 0; ; i++)
{
if (input[i] == '\0') {
printf("null!!!\n"); // now works
break;
}
}
只要input[i]
为0,循环就会退出,因此永远不会执行print语句 如果您感兴趣,下面是另一个工作代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
char input[] = "I am a string !!";
int i = 0;
while(1) {
if (input[i] == '\0') {
printf("null!!!");
break;
}
i++;
}
}
#包括
#包括
int main(){
字符输入[]=“我是一个字符串!!”;
int i=0;
而(1){
如果(输入[i]='\0'){
printf(“null!!!”);
打破
}
i++;
}
}
此处的所有答案都不会检查内存边界,因此您肯定会遇到分段错误。但是,如果在fread
ing期间发生错误,则输入中可能存在垃圾
char input[80];
fgets(input, sizeof(input), stdin);
for (i = 0; i<80; i++)
{
if (input[i] == '\0') {
printf("null!!!");
}
}
char输入[80];
fgets(输入,sizeof(输入),标准输入);
对于(i=0;i@avasin请不要这样做。这会让以前所有的回答看起来都很愚蠢。我已经回过头来了。恕我直言,在将其他答案指定为错误之前,您是否阅读了fgets()
手册页?这不是间接地强加了界限吗?:)@SouravGhosh,是的,为什么?好的,我现在看到这些答案在打印后有一个break
。if(!input[I])
也将对0
值执行,不是吗?(有效字符)@avasin,!只有当输入[i]
为零且空终止符在ASCII中为0
时,输入[i]
才会计算为真。