Я пытаюсь прочитать 1 строку, и я не уверен, как представлен символ новой строки. Должен ли я рассматривать его как 2 символа или 1 символ при чтении из файла с помощью fgets ()? Например, у меня есть строка из 15 символов + новая строка в файле. Итак, как мне безопасно выделить строку и прочитать эту строку?
Сначала я попробовал это:
char buf[16];
fgets(buf, 16, f);
Он правильно прочитал строку без символа новой строки, и я предполагаю, что buf [15] содержит нулевой символ.
Однако, когда я хочу прочитать и сохранить символ новой строки, он работает не так, как я думал. Насколько я знаю, '\ n' следует рассматривать как один символ и занимать всего один байт, поэтому, чтобы его прочитать, мне просто нужно прочитать еще один символ.
Но когда я пробую это
char buf[17];
fgets(buf, 17, f);
он делает то же самое, что и предыдущий пример - теперь в моей строке хранится символ новой строки (я не уверен, где в этом случае хранится нулевой символ)
Чтобы прочитать всю строку с новой строкой, мне нужно сделать это
char buf[18];
fgets(buf, 18, f);
ИЛИ это (это работает, но я не уверен, безопасно ли это)
char buf[17];
fgets(buf, 18, f);
Возникает вопрос: зачем мне выделять и читать 18 символов, если в строке всего 15 символов + новая строка?
fgets
пишет вне буфера. - person Daniel Fischer   schedule 17.11.2012fgets
), есть ли '\ r' в позиции 15? - person Daniel Fischer   schedule 17.11.2012"\r\n"
. - person Some programmer dude   schedule 17.11.2012