检查字符串数组是否为空

时间:2012-02-12 06:34:17

标签: c gdb

我已声明以下字符串数组: char * arrayIndi​​ces [100] = {0};

我与recp-> ut_line进行比较,声明为:

struct utmp {
....
char ut_line[32]
}

使用:

strcmp(arrayIndices[i], (char*)recp->ut_line))

这给了我一个分段错误。 我也在gdb中试过这些:

if (arrayIndices[i] == NULL)
if (arrayIndices[i] == "\0")

第二个出现错误。打印输出时,arrayIndi​​ces [i]显示值0x0。

3 个答案:

答案 0 :(得分:1)

strcmp失败,因为没有内存分配给arrayIndices[i]。您可以检查空,如下所示:

if (!arrayIndices[i] || !arrayIndices[i][0])
   /* Empty. */

答案 1 :(得分:1)

你需要在这里使用撇号而不是引号:

if (arrayIndices[i] == '\0')

答案 2 :(得分:0)

@cnicutar的回答是正确的,但对我来说看起来有点过于紧张。我想写

if ( NULL == arrayIndices[i] || 0 == strlen(arrayIndices[i]) )
    /* empty */

如果strlen占用过多的CPU时间,你会担心吗?永远不用担心,

另一方面 @ StilesCrisis的回答是错误的。如果我有足够的声誉,我会贬低它!实际上我很惊讶地意识到它甚至可以编译。 (可能是由于大多数平台上的'\0' == 0 == NULL

偏离主题:您可能对Ruby on Rails提供的String#blank?方法感兴趣: - )