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

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

Восстановить пароль Регистрация
 
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
02.11.2012, 15:18     Сброс массива char в текстовый файл #1
Я правильно понимаю, что для этого надо сделать массив на один символ длиннее, чем строка, и вписать последним символом '\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 в текстовый файл
Посмотрите здесь:

Текстовый файл UTF-8 сохранить как текстовый файл ANSI C++
Дан текстовый файл, содержащий целые числа. Определить в каждой четной строке максимальное число и записать результаты в новый текстовый файл C++
Копирование в текстовый файл из потока fstream массива типа char C++
Cохранение очень большого массива в текстовый файл C++
C++ В чем отличие двумерного массива типа char от массива указателей на char?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 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
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 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
5282 / 4801 / 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++ Поворот массива на 90 градусов (cannot convert form char to char*)
Запись в файл и последующее чтение массива типа char C++
array char* to char* (значения массива указателей в один указатель) C++

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

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

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