Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
#1

Сброс массива char в текстовый файл - C++

02.11.2012, 15:18. Просмотров 701. Ответов 10
Метки нет (Все метки)

Я правильно понимаю, что для этого надо сделать массив на один символ длиннее, чем строка, и вписать последним символом '\0'? Вот моя программа (не проверял, т.к. не уверен, что это лучший метод):

C++ (Qt)
1
2
3
4
5
6
7
8
char* Straight = "to be or not to be";
char Reversed[19];
for (int i=0; i<18; i++) {
Reversed[i] = Straight[17-i];
}
Reversed[18] = '\0';
FILE * Question = fopen("C:\\WORK\\QUESTION.TXT", "w");
fputs(Reversed, Question);
Я всё правильно сделал? Если что, можно пренебречь кроссплатформностью (у меня Visual C++ 2008).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2012, 15:18     Сброс массива char в текстовый файл
Посмотрите здесь:

Запись в *char элемента из массива *char[i] C++
Текстовый файл UTF-8 сохранить как текстовый файл ANSI C++
C++ Скопировать текстовый файл в новый файл, заменив в каждой строке слова «ok» на «*»
C++ Текстовый файл перевести в двоичный, а потом полученный двоичный файл перевести обратно в текстовый
Даны натуральное , символьный файл и текстовый файл . Файл содержит 30 слов , каждое из которых будем называть ключевым C++
Копирование в текстовый файл из потока fstream массива типа char C++
Cохранение очень большого массива в текстовый файл C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.11.2012, 16:58     Сброс массива char в текстовый файл #2
Если просто записать в файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <fstream>
int main(void)
{
 std::ofstream file;
 file.open("text.txt");
 char* Straight = "to be or not to be";
 file<<Straight;
 file.close();
 system("PAUSE");
 return 0;
}
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
02.11.2012, 19:49  [ТС]     Сброс массива char в текстовый файл #3
Цитата Сообщение от BumerangSP Посмотреть сообщение
Если просто записать в файл:
Да, просто записать. Только не строку, как в Вашем примере, а массив. Или это не принципиально?
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.11.2012, 20:40     Сброс массива char в текстовый файл #4
Vtulhu, а строка - это не массив символов?

Добавлено через 1 минуту
Чтоб явно было видно:
C++
1
 char Straight[] = "to be or not to be";
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
03.11.2012, 09:01  [ТС]     Сброс массива char в текстовый файл #5
Цитата Сообщение от BumerangSP Посмотреть сообщение
Vtulhu, а строка - это не массив символов?
Да, но строка обязана завершаться символом с кодом 0. Не возникнет ли глюка при попытке сбросить массив? Например, программа начнёт сбрасывать на диск всё содержимое памяти, пока не встретится \0.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17184 / 5438 / 337
Регистрация: 30.03.2009
Сообщений: 14,743
Записей в блоге: 26
03.11.2012, 11:26     Сброс массива char в текстовый файл #6
Цитата Сообщение от Vtulhu Посмотреть сообщение
Да, но строка обязана завершаться символом с кодом 0. Не возникнет ли глюка при попытке сбросить массив? Например, программа начнёт сбрасывать на диск всё содержимое памяти, пока не встретится \0.
http://www.cyberforum.ru/blogs/18334/blog97.html

Добавлено через 1 минуту
Цитата Сообщение от Vtulhu Посмотреть сообщение
Я всё правильно сделал?
Копирование из Straight в Reversed излишнее. Ну и по честному после открытия файла следует проверить, не произошла ли ошибка
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
03.11.2012, 14:28  [ТС]     Сброс массива char в текстовый файл #7
[QUOTE=Evg;3646763]http://www.cyberforum.ru/blogs/18334/blog97.html

Судя по всему, я правильно понял специфику различий между строками и массивами символов. Но лучше бы Вы просто написали это. Я не собираюсь становиться кодером на С++. Я программирую на гораздо более приятном языке. Потому мне и надо сбросить данные на диск. Обрабатывать их будет другая прога.

Копирование из Straight в Reversed излишнее.
При этом строка переворачивается задом наперёд. Но в основном я хотел продемонстрировать, что писаться будет именно массив, а не строка. В реальной программе, которую я пишу, сначала создаётся массив фиксированного размера, а потом заполняется ASCII-символами (с кодами от 32 до 122).

Ну и по честному после открытия файла следует проверить, не произошла ли ошибка
Да это понятно. В основном я хотел убедиться, что избранный мною способ не является неправильным.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17184 / 5438 / 337
Регистрация: 30.03.2009
Сообщений: 14,743
Записей в блоге: 26
04.11.2012, 14:42     Сброс массива char в текстовый файл #8
Цитата Сообщение от Vtulhu Посмотреть сообщение
При этом строка переворачивается задом наперёд
Пардон, проглядел

Цитата Сообщение от Vtulhu Посмотреть сообщение
Но в основном я хотел продемонстрировать, что писаться будет именно массив, а не строка
Просто между строкой и массивом char'ов разницы нет в контексте твоего вопроса
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
08.11.2012, 10:08  [ТС]     Сброс массива char в текстовый файл #9
Цитата Сообщение от Evg Посмотреть сообщение
Просто между строкой и массивом char'ов разницы нет в контексте твоего вопроса
То есть в функцию fputs можно запихать массив чаров вместо строки? Она поймёт, где массив кончается, несмотря на отсутствие завершающего нуля? Добавлять нуль самому - излишне?
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.11.2012, 10:43     Сброс массива char в текстовый файл #10
Цитата Сообщение от Vtulhu Посмотреть сообщение
Она поймёт, где массив кончается, несмотря на отсутствие завершающего нуля?
Как это себе представляете?

Добавлено через 4 минуты
Если так:
C++
1
char Straight[] = "to be or not to be";
то '\0' будет присутствовать. Так тоже:
C++
1
char* Straight = "to be or not to be";
Но если массив создаётся через копирование, как у вас, то конечно, нужно добавлять в массив '\0'.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2012, 10:51     Сброс массива char в текстовый файл
Еще ссылки по теме:

C++ В чем отличие двумерного массива типа char от массива указателей на char?
C++ Поворот массива на 90 градусов (cannot convert form char to char*)
C++ Задан текстовый файл, необходимо по нему сформировать двоичный файл индексов
Запись в файл и последующее чтение массива типа char C++
Приведение массива char[] (или char* ) в LPCTSTR C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17184 / 5438 / 337
Регистрация: 30.03.2009
Сообщений: 14,743
Записей в блоге: 26
08.11.2012, 10:51     Сброс массива char в текстовый файл #11
Цитата Сообщение от Vtulhu Посмотреть сообщение
То есть в функцию fputs можно запихать массив чаров вместо строки?
Можно, но строка обяательно должна заканчиваться нулём. Когда ты пишешь строковой литерал (набор символов в кавычках), то компилятор сам этот ноль добавит (т.к. это следует из стандарта языка). Когда ты строку ручками создаёшь в буфере, то добавить ноль кроме тебя некому. Собственно, в 10-м посте об этом уже сказали
Yandex
Объявления
08.11.2012, 10:51     Сброс массива char в текстовый файл
Ответ Создать тему
Опции темы

Текущее время: 11:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru