2017-02-08 3 views
2

Я пытался читать из stdin и печатать входные данные в файл, если вход завершен, тогда я хочу остановить программу. Однако это не работает, предложение if, если оно не активировано, когда я набираю «quit». Что не так с этим кодом?Сравнение строк, системный вызов

while((n_char = read(0, (void *)buffer, 10)) != 0){ 
    if (strcmp(buffer, "quit") == 0){ 
     printf("equal\n"); 
     exit(0); 
    } 
//Display the characters read 
    n_char = write(inFile, buffer,n_char); 
} 
+0

Просьба привести рабочий пример. –

ответ

1

read() не добавляет нулевой байт в завершение buffer. Но strcmp() ожидает, что его аргументы будут завершены нулевым байтом.

Добавьте нулевые байты перед тем strcmp():

buffer[n_char] = 0; 

(Если n_char является 10, то вы должны быть уверены, что buffer[n_char] не приводит из связанного доступа т.е., по крайней мере, один дополнительные байты в buffer для с другой стороны, вы можете использовать strncmp() `).

Кроме того, ваше состояние является неправильным. read() может перенастроить -1 по ошибке, которая прошла бы ваше состояние. Измените его на:

while((n_char = read(0, buffer, 10)) > 0) { 

Обратите внимание, что я удалил unnessary бросок к void *.

+0

Вы должны использовать только функции 'str *' в строках C-стиля. Документация по каждой из этих функций дает понять, что их входные данные должны быть строками, а не произвольными фрагментами данных, считанных из файла или сетевого подключения. –

+0

buffer [n_char] = 0 не решил его. –

+0

@InnoveerHipstirt Проверьте идентификатор, на входной строке есть символ новой строки. –

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