最好的方法来检查一个字符数组是否为空
哪个是检查字符数组是否为空的最可靠的方法?
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比检查第一个字节。 以上是计算速度最快的一次。