2016-02-07 3 views
-1

я получаю ошибку ошибки сегментации, когда я сравниваюКак проверить, не содержит ли строка буквенных символов?

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

и

команд [я] .cmd [0] имеет тип CHAR *.

и это происходит, когда

CMD [0] = 0x0

в соответствии с моим GdB отладчик.

Теперь это происходит, когда также нет буквенных символов. Например, строка с пробелами. Как бы мне избежать этого. Я хочу проверить, что моя строка имеет хотя бы символ.

Это ошибка, которая вызывает у меня ошибки сегментации

Программа принимаемый сигнал SIGSEGV, ошибки сегментации. __strcmp_ssse3() в ../sysdeps/x86_64/strcmp.S:213 213 movlpd (% RDI),% XMM1

+1

Разместите полный код. Без этого почти невозможно указать на ошибку. –

+0

* "' команды [i] .cmd [0] 'имеет тип' char * ', и это происходит, когда' cmd [0] = 0x0' * *. Вы показываете, что передаете указатель 'NULL' на' strcmp'. –

ответ

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. Лучше: 'if ((unsigned char) isalnum (str [i]))' – chux

+0

Почему мне нужно отображать возвращаемое значение 'isalnum', если оно возвращает' int'? @chux – stackptr

+0

Моя ошибка. Представляем 'if (isalnum ((unsigned char) str [i]))' – chux

Смежные вопросы