C 检查字符串数组是否为空

C 检查字符串数组是否为空,c,gdb,C,Gdb,我声明了以下字符串数组: char*arrayIndices[100]={0} 我与recp->ut_行进行比较,声明为: struct utmp { .... char ut_line[32] } 使用: strcmp(arrayIndices[i], (char*)recp->ut_line)) 这给了我一个分段错误。 我也在gdb中尝试过这些: if (arrayIndices[i] == NULL) if (arrayIndices[i] == "\0") 第二个结果是错误的

我声明了以下字符串数组: char*arrayIndices[100]={0}

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

struct utmp {
....
char ut_line[32]
}
使用:

strcmp(arrayIndices[i], (char*)recp->ut_line))
这给了我一个分段错误。 我也在gdb中尝试过这些:

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

第二个结果是错误的。arrayIndices[i]在打印时显示0x0的值。

strcmp失败,因为没有为
arrayIndices[i]
分配内存。您可以像这样检查是否为空:


您需要在此处使用撇号,而不是引号:


if(arrayIndices[i]='\0')
@cnicutar的答案是正确的,但对我来说似乎有点过于简洁。我想写信

if ( NULL == arrayIndices[i] || 0 == strlen(arrayIndices[i]) )
    /* empty */
您是否担心strlen会占用太多CPU时间?别担心

  • 过早优化是万恶之源

另一方面,@StilesCrisis的答案是错误的。如果我有足够的声誉,我会投反对票!事实上,我很惊讶地发现它甚至可以编译。(可能是由于大多数平台上的
'\0'==0==NULL


离题:您可能对RubyonRails提供的
String#blank?
方法感兴趣:-)

第一个有效。在第二次检查中,它无法访问内存。我认为“if(arrayIndices[I]==0)”可能是最好的方法。@user994165
arrayIndices[I]==NULL
完全等同于
!arrayIndices[i]
。出于某种原因,在gdb中,当我执行测试“p(arrayIndices[i]==NULL)”时,它在当前上下文中给了我一个“无符号”NULL”。但实际上运行它是有效的。在gdb中,我可以使用“p(arrayIndices[I]='\0')。但是
arrayIndices[I]
char*
。比较
char*
和字符文字有意义吗?
if ( NULL == arrayIndices[i] || 0 == strlen(arrayIndices[i]) )
    /* empty */