检查字符数组是否为空的最可靠方法是什么?
char text[50];
if(strlen(text) == 0) {}
或
if(text[0] == '\0') {}
或者我需要做什么
memset(text, 0, sizeof(text));
if(strlen(text) == 0) {}
最有效的方法是什么?
答案 0 :(得分:71)
鉴于此代码:
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)
将返回未定义的结果。
确保将C字符串初始化为空字符串的最简单/最快方法是将第一个字节设置为0。
char text[50];
text[0] = 0;
从那时起,strlen(text)
和非常快但不那么直截了当的(text[0] == 0)
测试都会检测到空字符串。
答案 1 :(得分:19)
取决于您的数组是否包含以null结尾的字符串。如果是,那么
if(text[0] == '\0') {}
应该足够了。
编辑:另一种方法是......
if (strcmp(text, "") == 0)
可能效率较低,但明确表达了您的意图。
答案 2 :(得分:7)
这将用于查找字符数组是否为空。它可能也是最快的。
if(text[0] == '\0') {}
如果text
数组为空,这也会很快。如果它包含字符,则需要先计算其中的所有字符。
if(strlen(text) == 0) {}
答案 3 :(得分:4)
第二种方法几乎肯定是测试以null结尾的字符串是否为空的最快方法,因为它涉及一次读取和一次比较。在这种情况下,这种方法肯定没有错,所以你也可以使用它。
第三种方法不检查字符数组是否为空;它确保字符数组为空。
答案 4 :(得分:4)
第二个是最快的。使用strlen
将关闭如果字符串确实为空,但strlen
将始终遍历字符串的每个字符,因此如果不是空,它会比你需要做更多的工作。
正如詹姆斯提到的那样,第三个选项会在检查之前擦除字符串,因此检查将始终成功,但这将毫无意义。
答案 5 :(得分:2)
if (text[0] == '\0')
{
/* Code... */
}
如果您正在编写闪存和/或RAM空间很小的微控制器,请使用此选项。使用strlen
而不是检查第一个字节会浪费很多更多闪存。
以上示例是最快的,需要的计算量较少。
答案 6 :(得分:0)
export const timeFunc = callLength => {
console.log(callLength); // prints "00:00:32.000"
const startingTime = Date.parse('1970-01-01T00:' + callLength + 'Z') // should print length in milliseconds?
console.log(startingTime); // prints NaN
}
以上内容取消了对指针“文本”的引用,并检查其是否为零。或者:
if (!*text) {}