2016-02-07 30 views
-1

我得到一个分段错误时,我比较如何检查一个字符串是否没有任何字母数字字符?

strcmp(commands[i].cmd[0],"quit") == 0) 

命令[I]。加利福尼亚[0]是类型char *相关。

并且当

CMD根据我的gdb调试[0] =为0x0

发生这种情况。

现在,当没有字母数字字符存在时,会发生这种情况。例如,一个只有空格的字符串。我将如何避免这种情况。我想检查我的字符串是否至少有一个符号。

这是导致

计划接收信号SIGSEGV我分割故障,分段故障错误。 __strcmp_ssse3()在../sysdeps/x86_64/strcmp.S:213 213 movlpd(%RDI),%XMM1

+1

安置自己的完整代码。没有这些,几乎不可能指出错误。 –

+0

*“'commands [i] .cmd [0]'的类型为'char *',当'cmd [0] = 0x0' *时发生'*。你显示你正在向'strcmp'传递'NULL'指针。 –

回答

1
int isalnumstr(const char *str) 
{ 
    int i; 

    for (i = 0; str[i]; ++i) 
     if (isalnum((unsigned char) str[i])) 
      return 1; 
    return 0; 
} 

来电代码:

if (isalnumstr(s)) 
    /* Contains alpha numeric */ 
else 
    /* Doesn't contain alpha numeric */ 
+0

1)'if(isalnum(str [i])'missing')'。 2)'isalnum(x)'定义为所有'unsigned char'和'EOF'。如果'x'是负数而不是'EOF'可能导致UB。更好:'如果((无符号字符)isalnum(str [i]))' – chux

+0

为什么我需要转换'isalnum'的返回值,如果它返回一个'int'? @chux – stackptr

+0

我的错误。意思是建议'if(isalnum((unsigned char)str [i]))' – chux

相关问题