2014-09-20 3 views
1

Когда я работаю с символьными строками. У меня есть что-то вроде этого:что добавлено сначала ' n' или ' 0'

#include <stdio.h> 
#define MAXLINE 1000 

main(){ 
int c; 
int i=0; 
char s[MAXLINE]; 

while(c=(getchar()) !=EOF) 
{ 
s[i] = c; 
++i; 
} 
} 

Я хочу спросить после того, как я пишу что-то вроде HELLO, а затем ударил enter разорвать линию делает добавляет «\ п» первым после того, как поток символов или завершающего символа Null т.е. ' \ 0'

Визуально, который один является правильным представлением о том, что происходит: (1) ПРИВЕТ \ п \ 0 ИЛИ (2) ПРИВЕТ \ 0 \ п

+3

Просьба отложить и скомпилировать ваш код перед публикацией здесь. –

+1

Я думаю, вы хотите 'while ((c = getchar())! = EOF). То, что у вас есть, не будет делать то, что вы думаете. – Ferruccio

+1

@Stack Overflow 32: В коде нет ничего, что бы добавить символ '\ 0' в любом месте. Поэтому ответ на ваш последний вопрос: ни то, ни другое, что происходит. – AnT

ответ

1

путь ваш код написан, существует символ NUL не добавлен к s.

Поскольку вы читаете ввод одного символа за раз, если вы хотите, чтобы s был завершен в NUL, вам нужно будет добавить NUL самостоятельно.

+0

ok если добавить это то, что я тогда что? скажем s [i] = '\ 0'. Затем сначала добавляется «\ n», или сначала строка заканчивается нажатием enter, чтобы разбить строку –

0

Важно, что EOF не эквивалентен новой строке. Цикл будет завершен только на EOF i.e Ctrl + D (в linux). Он не будет прерван при нажатии enter.

getchar() - это функция, которая считывает символ со стандартного ввода. EOF - специальный символ, используемый в C, чтобы указать, что достигнут КОНЕЦ ФАЙЛА.

Возвращаемое значение GetChar() является:

успех 1.На, прочитанный символ возвращается (продвинут на целочисленное значение).
2. Возвращаемый тип является int для размещения для специального значения EOF, которое указывает на отказ:
3.Если стандартный ввод был в конце файла, функция возвращает EOF и устанавливает индикатор eof (feof) от stdin.
4.Если какая-либо другая ошибка чтения происходит, функция также возвращает EOF, но вместо этого устанавливает свой индикатор ошибки (ferror).

Таким образом, каждый символ новой строки будет сохранен в String вместо завершения цикла. И он не добавляет никакого символа NULL в конце, поэтому не будет символа NULL. Вместо этого он может быть hello \ n (где '\ n' будет храниться как 0x0A в системе)

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