为什么我看不到数组中的最后一个字符是空终止符?
Why I can't see that last char in array is null terminator?
如何检查 char
数组是否以 null 结尾?
char input[80];
fgets(input, sizeof(input), stdin);
for (i = 0; input[i]; i++)
{
if (input[i] == '[=10=]') {
printf("null!!!"); // never works
}
}
例如,下面的代码不会打印 null
.
在您的 for
循环条件中,您已经在检查 input[i]
的非 0 值,因此内部 if
是 dead条件。
要进行测试,请进行无限循环,检查 if
,然后打印并 break
输出。像
for (i = 0; ; i++)
{
if (input[i] == '[=10=]') {
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] == '[=10=]') {
printf("null!!!");
break;
}
i++;
}
}
这里的所有答案都不检查内存边界,所以你肯定会 运行 进入分段错误。 不过,如果在 [=11] 期间发生错误=]ing,你可能在 input
中有垃圾。
char input[80];
fgets(input, sizeof(input), stdin);
for (i = 0; i<80; i++)
{
if (input[i] == '[=10=]') {
printf("null!!!");
}
}
您也可以将 if (input[i] == '[=13=]')
更改为 if (! input[i])
,因为 '[=15=]'
(null-terminator) 的 ASCII 值为 0
。
如何检查 char
数组是否以 null 结尾?
char input[80];
fgets(input, sizeof(input), stdin);
for (i = 0; input[i]; i++)
{
if (input[i] == '[=10=]') {
printf("null!!!"); // never works
}
}
例如,下面的代码不会打印 null
.
在您的 for
循环条件中,您已经在检查 input[i]
的非 0 值,因此内部 if
是 dead条件。
要进行测试,请进行无限循环,检查 if
,然后打印并 break
输出。像
for (i = 0; ; i++)
{
if (input[i] == '[=10=]') {
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] == '[=10=]') {
printf("null!!!");
break;
}
i++;
}
}
这里的所有答案都不检查内存边界,所以你肯定会 运行 进入分段错误。 不过,如果在 [=11] 期间发生错误=]ing,你可能在 input
中有垃圾。
char input[80];
fgets(input, sizeof(input), stdin);
for (i = 0; i<80; i++)
{
if (input[i] == '[=10=]') {
printf("null!!!");
}
}
您也可以将 if (input[i] == '[=13=]')
更改为 if (! input[i])
,因为 '[=15=]'
(null-terminator) 的 ASCII 值为 0
。