Меня смущает странная проблема. Когда я делаю что-то вроде ниже:
FILE* fl;
int* d = new int[3];
d[0] = -3;
d[1] = -3;
d[2] = -3;
plik = fopen("E:\data.txt","r+b");
fwrite((char*)d, sizeof(int), sizeof(int)*3, fl);
fclose(fl);
system("pause");
Он правильно записывает некоторые данные в файл, который я могу очистить в блокноте и получить размер файла 0B. Но если я изменю -3 на -2:
FILE* fl;
int* d = new int[3];
d[0] = -2;
d[1] = -2;
d[2] = -2;
plik = fopen("E:\data.txt","r+b");
fwrite((char*)d, sizeof(int), sizeof(int)*3,fl);
fclose(fl);
system("pause");
в результате, когда я очищаю данные в Блокноте и сохраняю файл, он всегда имеет 2B и не может быть очищен до конца. В чем проблема?. Заранее спасибо.
Ответ 1 · рейтинг 1 · Michael Dillon
Вы записываете двоичные данные в файл, а затем открываете его в текстовом редакторе. Результат НЕОПРЕДЕЛЕН. Когда вы видите слово "UNDEFINED" в документации, обратите внимание. Это ваша обязанность не делать таких вещей. Текстовый редактор предназначен для открытия текстовых файлов, то есть строк. Чтобы записать int в текстовый файл, нужно сделать что-то вроде:
char str[BIGNUMBER];
sprintf(str, "%d", d[0]);
fwrite...
Вероятно, это не то, что вы хотели, но это единственный способ получить текстовый файл, совместимый с Блокнотом. Что вы, вероятно, захотите сделать, так это найти редактор двоичных файлов, который может открывать, отображать и редактировать двоичные файлы. Лично я просто использую vim с параметром -b даже в Windows.
Ответ 2 · рейтинг 1 · oakad
Блокнот явно путает данные, которые вы пишете, с меткой порядка следования байтов в Юникоде и попадает в некоторые забавные ситуации. штат.
Подумайте, как данные, которые вы пишете, будут выглядеть в двоичном виде и что они могут сделать с текстовым редактором.
Ответ 3 · рейтинг 1 · unbound
когда вы открываете файл, вы назначаете его имени переменной plik
plik = fopen("E:\data.txt","r+b");
но вы пишете в переменную fl, которая не инициализирована.
fwrite((char*)d, sizeof(int), sizeof(int)*3,fl);
И размер для записи не должен умножаться на sizeof(int).
fwrite((char*)d, sizeof(int), 3,fl);