C 检查字符串数组是否为空
我声明了以下字符串数组: char*arrayIndices[100]={0} 我与recp->ut_行进行比较,声明为: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") 第二个结果是错误的
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时间?别担心
- 过早优化是万恶之源
'\0'==0==NULL
)
离题:您可能对RubyonRails提供的
String#blank?
方法感兴趣:-)第一个有效。在第二次检查中,它无法访问内存。我认为“if(arrayIndices[I]==0)”可能是最好的方法。@user994165arrayIndices[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 */