C: Сравнение между символом в строке и '\ 0' не работает? - PullRequest
0 голосов
/ 13 марта 2011

Я делаю функцию для подсчета количества символов в первой строке строки. В случае, если строка имеет длину только одну строку, то она считает количество символов до завершающего нуля \ 0. Часть, в которой сравнивается символ ch с \ n, работает, как и ожидалось, но мне не удается сравнить символ ch с \ 0. Это никогда не соответствует сравнению, даже если я добавил несколько \ 0 в строку. Есть идеи?

#include <stdio.h>

int main() {
    /*variables*/
    char* string="shit\nand\npee\0";
    int bytesRead=0;
    int bytesTemp=0;
    char ch=' ';

    /*find the number of characters before a newline or end of string*/
    while(ch!='\n') { //doesn't work with ch!='\0'
        sscanf(string+bytesRead, "%c%n", &ch, &bytesTemp);
        bytesRead+=bytesTemp;
        printf("Bytes read: %d\n", bytesRead);
        printf("Variable ch has value: %c\n", ch);
    }
    return 0;
}

Ответы [ 2 ]

2 голосов
/ 13 марта 2011

Проблема в том, что вы не проверяете возвращаемое значение sscanf. Если произойдет сбой, ch будет не обновлен, поэтому вы получите последний символ дважды, а затем прочитаете за концом строки.

Попробуйте что-то вроде:

if (sscanf(string+bytesRead, "%c%n", &ch, &bytesTemp) != 1)
  break;
0 голосов
/ 13 марта 2011

Вы также можете избежать использования sscanf и вместо этого сделать следующее:

while((ch = *string) != '\n' && ch != '\0') {
  bytesRead++;
  printf("Bytes read: %d\n", bytesRead);
  printf("Variable ch has value: %c\n", ch);
  string++;
}

Это останавливается, когда он видит \ n или \ 0.

...