如何检查char
数组是否为空?为什么我看不到数组中的最后一个char是空终止符?
char input[80];
fgets(input, sizeof(input), stdin);
for (i = 0; input[i]; i++)
{
if (input[i] == '\0') {
printf("null!!!"); // never works
}
}
例如,下面的代码不打印null
。
如何检查char
数组是否为空?为什么我看不到数组中的最后一个char是空终止符?
char input[80];
fgets(input, sizeof(input), stdin);
for (i = 0; input[i]; i++)
{
if (input[i] == '\0') {
printf("null!!!"); // never works
}
}
例如,下面的代码不打印null
。
在你for
环情况下,你已经检查的input[i]
非0值,所以内部的if
是死条件。
为了测试,做一个无限循环,检查if
然后打印和break
出来。像
for (i = 0; ; i++)
{
if (input[i] == '\0') {
printf("null!!!\n"); // now works
break;
}
}
只要input[i]
东西0退出循环,所以永远不会执行该打印语句。
这里是另一个工作的代码,如果你有兴趣:
#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++;
}
}
这里所有的答案不检查内存边界,所以你肯定会碰到一个分段错误。
但是,如果在fread
ing期间发生错误,您可能在input
中有垃圾。
char input[80];
fgets(input, sizeof(input), stdin);
for (i = 0; i<80; i++)
{
if (input[i] == '\0') {
printf("null!!!");
}
}
你也可以改变if (input[i] == '\0')
只是if (! input[i])
因为'\0'
(空终止符)的ASCII值0
。
更新的问题 – avasin
@avasin请**不要**。它使所有以前的回答者显得愚蠢。我已经回滚了。 –
@SouravGhosh我刚刚添加了更多信息>< – avasin