Я создал программу на C++, которая запрашивает у пользователя имя файла и запрашиваемый файл. Программа проверяет, превышает ли запрошенный размер файла фактический размер файла, а затем добавляет в конце файла нулевые символы (те, которые имеют код 0
), до тех пор, пока не будет достигнут требуемый размер файла.
Я сделал это так (с fstream):Сохранение символов NUL (ASCII 0)
for (blah blah) {
file << '\0'; // ('file' is an fstream object)
}
и он работал так же, как я хотел. Я знаю, что это плохой код, так как он может мучить жесткий диск, отправив на него много вызовов (и, кстати, он медленный). Это было только по причинам тестирования. Затем из-за этой проблемы я решил создать переменную, хранящую символы NUL, и сохранить всю переменную в файл сразу (без сохранения каждого символа отдельно).
Тогда возникла проблема ... из-за символа NUL (также известного как нуль-терминатор), завершая строку, я не мог хранить эти нули каким-либо образом.
Я пробовал массив символов, строку и даже строковый поток, но никто не работал (есть что-то интересное в stringstream, когда я его использовал, содержимое файла выглядело так: 0x47c274
). Во всяком случае, это не сработало, как я ожидал.
Есть ли эффективный способ хранения массива нулевых символов?
Просто совет, не относятся к ASCII 0, как NUL, а не NULL. NULL ist фактический nullpointer и NUL ('\ NUL') является ASCII 0. – LukeN
Я предполагаю, что в случае stringstream вы отправили указатель на него в поток вместо самого объекта. Кроме того, строка должна работать, она может содержать \ 0 без проблем. – liori
Я вижу сейчас; моя проблема заключалась в том, чтобы сохранить его в файле, а не хранить его :) – rhino