вставка текста в файл (конец строки не вводится)

У меня странная проблема:

Я прочитал файл в buf и попытался запустить его в ssh (Linux) ..

мой файл содержит:

We
I
a

так что это мой buf:

введите описание изображения здесь

Теперь я создаю новый файл и вставляю buf в этот новый файл:

FILE*nem_file_name;
nem_file_name= fopen("email1.clear","wb"); //create the file if not exist.
fwrite (buf, sizeof(char), strlen(buf),nem_file_name); //write the new sensored mail to the file.

в этом случае был создан файл: email1.clear, но он содержит:
We Ia

когда я копирую его в буфер обмена и вставляю в эту тему, он был вставлен так:

We
I
a

почему в моем файле нет конца строки? Я хочу, чтобы это было как в моем буфере обмена: /

ОБНОВИТЬ
Я попытался создать buf вручную:

char buf[10];
buf[0] = 'W';
buf[1] = 'e';
buf[2] = 32;
buf[3] = 13;
buf[4] = 10;
buf[5] = 'I';
buf[6] = 13;
buf[7] = 10;
buf[8] = 'a';
buf[9] = 0;

(обратите внимание, что я не прочитал файл в buf, но сделал это вручную)

а потом:

FILE*nem_file_name;
nem_file_name= fopen("email1.clear","wb"); //create the file if not exist.
fwrite (buf, sizeof(char), strlen(buf),nem_file_name);

и файл email1.clear был создан как я хочу:

We
I
a

Я не могу этого понять!

3

Решение

Скриншот отладчика на самом деле из вашей среды Linux? Или вы создали его на Windows-отладчике?

Это зависит от того, как вы читаете оригинальный файл. Я использую текстовый режим (r или же rt на fopen call), Linux преобразует CRLF (13,10) в один символ LF (10) во время чтения. При записи этого в новый файл в двоичном режиме (wb как в вашем коде), он останется одним LF.

Блокнот не может обрабатывать отдельные символы LF как символы новой строки, однако, ваш веб-браузер, очевидно, делает.

ОБНОВИТЬ:
Символы конца строки обрабатываются разными операционными системами по-разному. При открытии файла в текстовом режиме различия обрабатываются во время чтения / записи и конвертируются в / из режима системы. В двоичном режиме байты считываются и записываются без преобразования (открыть документацию).

Это зависит от того, где программа должна работать и какие клиенты должны читать вывод (Linux / Windows). Когда ваш код работает в Linux, читает текстовые файлы из Linux и генерирует текстовые файлы, которые будут использоваться в Linux, используйте текстовый режим (то же самое относится и к Windows). Если вам нужно смешать платформы, вам, возможно, придется конвертировать концы строк самостоятельно.

1

Другие решения

Это текст, почему вы пишете его в двоичный файл ("wb")? Просто работайте с текстовыми файлами, и все должно быть хорошо (удалить b из вашего режима открытия файла, когда вы читаете файл и когда вы пишете файл)

1

Я думаю, что strlen (buf) вернет размер buf без нулевой символ, обозначающий конец строки. Вы можете попробовать и написать в свой файл, как это:

fwrite (buf, sizeof(char), strlen(buf), nem_file_name);
char eos = '\0';
fputc (eos, nem_file_name);

Просто мое предположение. Удачи!

-1
По вопросам рекламы [email protected]