C-检查字符串中的字符是否为空时缺陷



我在检查字符串中的特定字符是否为 NULL( ''(时有问题。它给了我误报,否则我就这么认为。

在我的代码中,我想知道有人输入了3个以上以上以上的字符。

我尝试放置NULL而不是'',但它仍然给我带来误报。

这是我检查的事情:

int main()
{
    char* str = (char*) calloc(10,sizeof(char));
    scanf("%s",str);
    if (str[1]=='' || str[3]!='')
        printf("Test");
}

当我的输入超过3个字符或小于2个字符时,它给出了正确的输出("Test"(,但是当它为2个字符时,也确实会给我("Test"(的false Output。它只有在3个字符时才按预期工作。我想让它起作用(而不是输出2或3个字符(。

通过执行if (str[1]=='' || str[3]!=''),您本质上是在检查输入是否正好是1个字符,还是 3个字符。任何其他不是3个字符长的输入都将通过。您的代码有效,但是它的可读性较低,效率较低。这个问题在您未显示的代码中的其他地方。但是,为了确保输入恰好是2或3个字符,为什么不只是在索引2或3处检查终止?

if ((str[0] && str[1]) &&
    (str[2] == '' || str[3] == '')) // 2 or 3 letters long
   printf("OK");
else
   printf("Not OK");

或简单地使用strlen

size_t length = strlen(str);
if (length == 2 || length == 3) printf("OK");

顺便说一句,不要不必要地在堆上分配内存。对于这样的微小阵列,在堆栈上分配会好得多。而且,无论如何要覆盖字符串时,您甚至不需要用calloc归零。即使您想初始化字符串,只有str[0] = 0;也会终止字符串,而这已经足够了,而不是浪费时间将整个数组

归零

,不要在c

中施放malloc家族的结果

相关内容

  • 没有找到相关文章

最新更新