2016-02-07 62 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

相關問題