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

时间:2009-11-25 00:12:01

标签: c arrays null char

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

char text[50];

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

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

或者我需要做什么

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

最有效的方法是什么?

7 个答案:

答案 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) {}