检查字符数组是否为空的最佳方法

ZPS*_*ZPS 59 c arrays null char

检查字符数组是否为空的哪种方法最可靠?

char text[50];

if(strlen(text) == 0) {}
Run Code Online (Sandbox Code Playgroud)

要么

if(text[0] == '\0') {}
Run Code Online (Sandbox Code Playgroud)

或者我需要做什么

 memset(text, 0, sizeof(text));
 if(strlen(text) == 0) {}
Run Code Online (Sandbox Code Playgroud)

什么是最有效的方式来解决这个问题?

bbu*_*bum 74

鉴于此代码:

char text[50];
if(strlen(text) == 0) {}
Run Code Online (Sandbox Code Playgroud)

接下来是关于此代码的问题:

 memset(text, 0, sizeof(text));
 if(strlen(text) == 0) {}
Run Code Online (Sandbox Code Playgroud)

我闻到了混乱.具体来说,在这种情况下:

char text[50];
if(strlen(text) == 0) {}
Run Code Online (Sandbox Code Playgroud)

......内容text[]将是未初始化和未定义的.因此,strlen(text)将返回未定义的结果.

确保将C字符串初始化为空字符串的最简单/最快方法是将第一个字节设置为0.

char text[50];
text[0] = 0;
Run Code Online (Sandbox Code Playgroud)

从那时起,两者strlen(text)和非常快速但不那么简单的(text[0] == 0)测试都会检测到空字符串.


Par*_*ppa 19

取决于您的数组是否包含以null结尾的字符串.如果是的话,那么

if(text[0] == '\0') {}
Run Code Online (Sandbox Code Playgroud)

应该足够了.

编辑:另一种方法是......

if (strcmp(text, "") == 0)
Run Code Online (Sandbox Code Playgroud)

这可能效率较低,但明确表达了您的意图.


Pet*_*and 7

这将用于查找字符数组是否为空.它可能也是最快的.

if(text[0] == '\0') {}
Run Code Online (Sandbox Code Playgroud)

如果text数组为空,这也会很快.如果它包含字符,则需要先计算其中的所有字符.

if(strlen(text) == 0) {}
Run Code Online (Sandbox Code Playgroud)

  • 不要使用 strlen 来测试 cstring 是否为空。它不是恒定时间操作。 (2认同)