【发布时间】:2019-05-18 07:46:57
【问题描述】:
我在检查字符串中的特定字符是否为 NULL ('\0') 时遇到问题。它给了我误报,或者我是这么认为的。
在我的代码中,我想知道是否有人输入了超过 3 个或少于 2 个字符。
我尝试使用 NULL 而不是 '\0',但它仍然会给我带来误报。
这是我做的检查:
int main()
{
char* str = (char*) calloc(10,sizeof(char));
scanf("%s",str);
if (str[1]=='\0' || str[3]!='\0')
printf("Test");
}
当我的输入超过 3 个字符或少于 2 个字符时,它会给出正确的输出 ("Test"),但当它是 2 个字符时,它也会给我 ("Test") 的错误输出。只有当它正好是 3 个字符时,它才会按预期工作。我想用 2 或 3 个字符使其工作(不输出“测试”)。
【问题讨论】:
-
您需要忽略 first 空字节之后的所有内容。例如,如果
str[2]是'\0',那么您不应该查看str[3],因为它包含什么并不重要。但是您应该只调用strlen(str),然后直接检查长度,而不是四处寻找空字节。 -
是什么让您认为
NULL与'\0'有某种关联? -
"
~~~ warning: format '%p' expects argument of type 'void *' ..." 您显示的代码中没有可能导致此警告的行。 -
@alk 实际上,
'\0'被称为空字符或空字节。NUL是字符代码缩写,有时用于表示某些字符集中的空字符。当然,NULL 是空指针,它与空字符完全无关。 -
问题中显示的代码,一旦包含
<stdio.h>和<stdlib.h>,如果输入短于两个或长于三个字符,则会打印“Test”。当输入是两个字符时,它不会给出“Test”的错误输出。该语句中的问题是错误的,并且无法显示实际的失败代码。
标签: c null conditional c-strings