Написать пустую строку в файл в C - PullRequest
0 голосов
/ 20 марта 2011

Я использовал функцию записи, чтобы записать некоторые вещи в файл.теперь я хочу вставить пустую ссылку в файл перед следующей функцией записи, кто-нибудь знает, как это сделать?

Write(logs,log,strlen(log));

- моя первая запись, так что теперь новая строка будет иметь вид:

Write(logs,'/n',strlen(log));

или я должен создать новую char[3] = '/n';?

Ответы [ 3 ]

6 голосов
/ 20 марта 2011

Предполагая, что вы имеете в виду функцию POSIX write(), что-то вроде этого должно работать:

write(logs,"\n",1);

Обратите внимание, что "\n" - это строка из 1 символа - вам может потребоваться "\r\n" в зависимости от того, нужен ли вам возврат каретки и новая строка в файле.

0 голосов
/ 21 октября 2014

Я знаю, что этот пост довольно старый, но я создаю файл журнала и когда Я пытаюсь написать "\ n", он не будет писать ....:

write(fd,"\n\n==== NEW CLIENT ====\n\n",24);

Выходные данные в файле:

==== NEW CLIENT ====

Без всякой пустой строки ... есть идеи? даже если я поставлю:

write(fd,"\n",1);

ничего не делать ...: /

Я понял ... Я компилировал программу в Linux и проверял файл журнала в Windows, если я открываю файл журнала в Linux, все в порядке ...

0 голосов
/ 20 марта 2011

Первая проблема, которую необходимо решить, заключается в том, что символ новой строки представлен обратной косой чертой-n ('\n' или "\n"), а не косой чертой-n.

Когда вы пишете '/n', вы должны получить предупреждение компилятора о многосимвольной символьной константе, которая является непереносимой частью C.

Очевидно, вы можете создать переменную для хранения новой строки, но в этом нет необходимости; Строковый литерал будет в порядке. Если вы это сделаете, правильное обозначение будет:

const char newline[] = "\n";

Вы можете написать:

const char rather_odd[3] = { '/n' };

но ... фигурные скобки необходимы, и первый символ имеет значение, зависящее от компилятора, а два других символа равны NUL '\0'. Это также использует больше минимально необходимого пространства; переменная newline представляет собой 2-байтовый массив.

С вашей нестандартной Write() функцией, возможно, правильный синтаксис:

Write(logs, "\n", 1);

Это испускает одну новую строку; если предыдущая строка (та, что в log) сама не была завершена символом новой строки, у вас нет пустой строки в файле; вам придется написать второй перевод строки. Возможно, вы даже захотите проверить это:

size_t len = strlen(log);
Write(logs, log, len);
len = (log[len-1] == '\n') ? 1 : 2;
Write(logs, "\n\n", len);

Также обратите внимание, что GCC предупредит вас о глобальной переменной с именем log (потому что стандарт C оставляет за собой имя). Локальные переменные в порядке.

$ cat x.c
int x = '/n';
int log = 2;
$ gcc -c x.c
x.c:1:9: warning: multi-character character constant
x.c:2:5: warning: built-in function ‘log’ declared as non-function
$

Недавно я столкнулся с этой проблемой, когда воскрешал код, последний раз измененный около 20 лет назад.

(Тестирование с GCC 4.5.2 на MacOS X 10.6.6.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...