Хранение NUL-символов (ASCII 0) - PullRequest
       23

Хранение NUL-символов (ASCII 0)

1 голос
/ 03 октября 2010

Я создал программу на C ++, которая запрашивает у пользователя имя файла и запрашиваемый размер файла. Программа проверяет, больше ли запрашиваемый размер файла, чем фактический размер файла, и затем добавляет нулевые символы (символы с кодом 0) в конец файла, пока не будет достигнут запрашиваемый размер файла.
Я сделал это так (с помощью fstream):

for (blah blah) {
    file << '\0'; // ('file' is an fstream object)
}

и это сработало так, как я хотел. Я знаю, что это плохой код, поскольку он может мучить жесткий диск, посылая ему много вызовов (и, кстати, он медленный). Это было только из соображений тестирования. Затем из-за этой проблемы я решил создать переменную, хранящую символы NUL, и сохранить всю переменную в файл сразу (без сохранения каждого символа отдельно).
Затем возникла проблема ... из-за символа NUL (также известного как нулевой терминатор), оканчивающего строку, я никак не мог сохранить эти нули.
Я пробовал массив символов, строку и даже строковый поток, но ни один не работал (в строковом потоке было что-то интересное, когда я использовал его, содержимое файла выглядело так: 0x47c274). Во всяком случае, это не сработало, как я ожидал.
Есть ли эффективный способ хранения массива нулевых символов?

Ответы [ 2 ]

2 голосов
/ 03 октября 2010

Вот пример:

#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
  ofstream fout("pokemon");
  char buffer[1000];
  std::fill(buffer, buffer + 1000, '\0');
  fout.write(buffer, sizeof(char) * 1000);
  return 0;
}
2 голосов
/ 03 октября 2010

Сохраните их в массиве символов и используйте ostream :: write для записи массива в файл.

...