У меня странная проблема:
Я прочитал файл в 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
Я не могу этого понять!
Скриншот отладчика на самом деле из вашей среды Linux? Или вы создали его на Windows-отладчике?
Это зависит от того, как вы читаете оригинальный файл. Я использую текстовый режим (r
или же rt
на fopen
call), Linux преобразует CRLF (13,10) в один символ LF (10) во время чтения. При записи этого в новый файл в двоичном режиме (wb
как в вашем коде), он останется одним LF.
Блокнот не может обрабатывать отдельные символы LF как символы новой строки, однако, ваш веб-браузер, очевидно, делает.
ОБНОВИТЬ:
Символы конца строки обрабатываются разными операционными системами по-разному. При открытии файла в текстовом режиме различия обрабатываются во время чтения / записи и конвертируются в / из режима системы. В двоичном режиме байты считываются и записываются без преобразования (открыть документацию).
Это зависит от того, где программа должна работать и какие клиенты должны читать вывод (Linux / Windows). Когда ваш код работает в Linux, читает текстовые файлы из Linux и генерирует текстовые файлы, которые будут использоваться в Linux, используйте текстовый режим (то же самое относится и к Windows). Если вам нужно смешать платформы, вам, возможно, придется конвертировать концы строк самостоятельно.
Это текст, почему вы пишете его в двоичный файл ("wb"
)? Просто работайте с текстовыми файлами, и все должно быть хорошо (удалить b
из вашего режима открытия файла, когда вы читаете файл и когда вы пишете файл)
Я думаю, что strlen (buf) вернет размер buf без нулевой символ, обозначающий конец строки. Вы можете попробовать и написать в свой файл, как это:
fwrite (buf, sizeof(char), strlen(buf), nem_file_name);
char eos = '\0';
fputc (eos, nem_file_name);
Просто мое предположение. Удачи!