最好的方法来检查一个字符数组是否为空

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

char text[50]; if(strlen(text) == 0) {} 

要么

 if(text[0] == '\0') {} 

或者我需要做的

  memset(text, 0, sizeof(text)); if(strlen(text) == 0) {} 

什么是最有效的方式去呢?

鉴于此代码:

 char text[50]; if(strlen(text) == 0) {} 

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

  memset(text, 0, sizeof(text)); if(strlen(text) == 0) {} 

我感到困惑。 具体而言,在这种情况下:

 char text[50]; if(strlen(text) == 0) {} 

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

确保将Cstring初始化为空string的最简单/最快的方法是简单地将第一个字节设置为0。

 char text[50]; text[0] = 0; 

从那时起, strlen(text)和非常快但不是非常简单的(text[0] == 0)testing都将检测到空string。

取决于你的数组是否持有以空字符结尾的string。 如果是的话

 if(text[0] == '\0') {} 

应该足够了。

编辑:另一种方法是…

 if (strcmp(text, "") == 0) 

这可能效率较低,但明确expression了你的意图。

这将工作,以查找一个字符数组是否为空。 这可能也是最快的。

 if(text[0] == '\0') {} 

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

 if(strlen(text) == 0) {} 

第二种方法几乎可以肯定是testing一个以空字符结尾的string是否为空的最快方法,因为它涉及一个读和一个比较。 在这种情况下,这种方法肯定没有问题,所以你可以使用它。

第三种方法不检查字符数组是否为空; 它确保一个字符数组是空的。

第二个是最快的。 如果string确实是空的, 那么使用strlen将会closures,但是strlen总是遍历string的每个字符,所以如果它不是空的,它会做比你需要的更多的工作。

正如詹姆斯所说,第三个选项在检查之前将string抹掉,所以检查总是成功的,但是没有意义。

 if(text[0] == '\0') {} 

使用这个如果你的代码为微控制器在flash和ram上的空间很小,你会浪费更多的flash使用strlen比检查第一个字节。 以上是计算速度最快的一次。