我已声明以下字符串数组: char * arrayIndices [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")
第二个出现错误。打印输出时,arrayIndices [i]显示值0x0。
答案 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时间,你会担心吗?永远不用担心,
http://c2.com/cgi/wiki?PrematureOptimization
过早优化是万恶之源。
另一方面 @ StilesCrisis的回答是错误的。如果我有足够的声誉,我会贬低它!实际上我很惊讶地意识到它甚至可以编译。 (可能是由于大多数平台上的'\0' == 0 == NULL
)
偏离主题:您可能对Ruby on Rails提供的String#blank?
方法感兴趣: - )