У меня есть этот код в C: (! С)Нулевой символ в с
char c;
char *s;
....
while(1){
c = *(s++)
if(!c){
exit(1);
}
....
}
Что делать? как я могу связаться с выходом?
У меня есть этот код в C: (! С)Нулевой символ в с
char c;
char *s;
....
while(1){
c = *(s++)
if(!c){
exit(1);
}
....
}
Что делать? как я могу связаться с выходом?
!c
всегда оценивается в false
за исключением случаев, когда c==0
, то есть c=='\0'
. Поэтому код выйдет, когда достигнут конец строки, указывающей на то, что указывает s
. (Предполагая, что s
указывает на строку с нулевым завершением).
Обратите внимание, что c = *(s++)
получает один символ строки и перемещает указатель на следующий символ.
Строка всегда по умолчанию заканчивается нулем. Если нет, то это не строка. Таким образом, строка с нулевым завершением является избыточной. – ajay
@ajay: конечно, но OP не * вызывает * свою строку '* s' и не подразумевает, что это строка. Таким образом, он может хранить любые данные char (он все равно должен быть списком с нулевым завершением, поскольку он равен стандартной строке C). – usr2564301
'! C' будет истинным, если значение' c' равно 0. Некоторые представления для 0 (кроме литерала 0) являются 'false',' '\ 0'' (aka NUL char) и 'NULL '. – jweyrich
Вы можете многому научиться, перейдя код с помощью отладчика. – Mike
Это, кстати, не имеет никакого отношения к «x86» или любой другой архитектуре. Этот вопрос на самом деле является основным принципом C, что '0' представляет false, а любое другое значение представляет true – Brandin