2014-02-21 4 views
-1

У меня есть этот код в C: (! С)Нулевой символ в с

char c; 
char *s; 

.... 

while(1){ 
    c = *(s++) 
    if(!c){ 
     exit(1); 
    } 
    .... 
} 

Что делать? как я могу связаться с выходом?

+0

'! C' будет истинным, если значение' c' равно 0. Некоторые представления для 0 (кроме литерала 0) являются 'false',' '\ 0'' (aka NUL char) и 'NULL '. – jweyrich

+0

Вы можете многому научиться, перейдя код с помощью отладчика. – Mike

+0

Это, кстати, не имеет никакого отношения к «x86» или любой другой архитектуре. Этот вопрос на самом деле является основным принципом C, что '0' представляет false, а любое другое значение представляет true – Brandin

ответ

2

!c всегда оценивается в false за исключением случаев, когда c==0, то есть c=='\0'. Поэтому код выйдет, когда достигнут конец строки, указывающей на то, что указывает s. (Предполагая, что s указывает на строку с нулевым завершением).

Обратите внимание, что c = *(s++) получает один символ строки и перемещает указатель на следующий символ.

+0

Строка всегда по умолчанию заканчивается нулем. Если нет, то это не строка. Таким образом, строка с нулевым завершением является избыточной. – ajay

+0

@ajay: конечно, но OP не * вызывает * свою строку '* s' и не подразумевает, что это строка. Таким образом, он может хранить любые данные char (он все равно должен быть списком с нулевым завершением, поскольку он равен стандартной строке C). – usr2564301

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