检查字符数组是否为空的最可靠的方法是什么?
char text[50]; if(strlen(text) == 0) {}
或者
if(text[0] == '\0') {}
还是我需要
memset(text, 0, sizeof(text)); if(strlen(text) == 0) {}
什么是解决这个问题最有效的方法?
取决于数组是否包含空终止字符串,如果包含,则
应该足够了。
编辑: 另一种方法是..。
if (strcmp(text, "") == 0)
虽然可能效率不高,但是清楚地表达了你的意图。
第二种方法几乎肯定是测试空终止字符串是否为空的最快方法,因为它涉及一次读取和一次比较。在这种情况下,这种方法当然没有任何错误,因此您也可以使用它。
第三个方法不检查字符数组是否为空; 它确保字符数组为空。
这将用来查找一个字符数组是否为空。它可能也是最快的。
如果 text数组为空,那么这也会很快。如果它包含字符,则需要首先计算其中的所有字符。
text
if(strlen(text) == 0) {}
第二个是最快的。使用 strlen将关闭 如果字符串确实是空的,但是 strlen将始终迭代字符串的每个字符,所以如果它是 没有空的,它将做比您需要的更多的工作。
strlen
正如 James 提到的,第三个选项在检查之前删除字符串,所以检查总是成功的,但是它将是没有意义的。
根据这个代码:
接下来是一个关于这个代码的问题:
我闻到了困惑的味道,尤其是这个案子:
... text[]的内容将是未初始化和未定义的。因此,strlen(text)将返回一个未定义的结果。
text[]
strlen(text)
确保将 C 字符串初始化为空字符串的最简单/最快的方法是将第一个字节设置为0。
char text[50]; text[0] = 0;
从那时起,strlen(text)和非常快但并不简单的 (text[0] == 0)测试都将检测到空字符串。
(text[0] == 0)
if (text[0] == '\0') { /* Code... */ }
如果您正在为闪存和/或 RAM 空间很小的微控制器编写代码,请使用此选项。使用 strlen会比检查第一个字节浪费更多的闪存。
上面的例子是最快的,所需的计算量也最少。
if (!*text) {}
上面的代码解除了指针“ text”的引用,并检查它是否为零。另外:
if (*text == 0) {}