Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2009, 19:59   #1
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию Проблема с записью структуры в файл

Здравствуйте,

Я пишу программу для колледжа, но столкнулся с нижеприведённой проблемой:

Имеется структура вида:

Код:
struct Question {         
   String sQuestion;       
   String sFirstVariant;
   String sSecondVariant;
   String sThirdVariant;
   String sCorrectVariant;
};

struct File {
   Question Questions[50]; 
   String sTheme;
   String sObject;
}QuestionsFile;
После введения данных я пытаюсь записать структуру в файл:

Код:
 if (FileSaveDialog1->Execute() == true) {
	String FileName = (FileSaveDialog1->FileName+'\0').c_str();
	FILE *Path = fopen((char*)&FileName,"w");
	fwrite(&QuestionsFile,sizeof(QuestionsFile),1,Path);
        }
В этом примере я использую функцию "fopen()", ее прототип:

Код:
FILE *fopen(const char *filename, const char *mode);
Эта функция просит указатель на переменную типа char в качестве имени файла, но я получаю имя файла в UnicodeString. После компиляции даного кода возникает ошибка:

Цитата:
Acess violation at adress 329A9698 in module 'CC3290MT.DLL. Read of adress F84D009C'
Предположительно из-за этого участка:

Код:
 (char*)&FileName
(в коде помечен красным) из-за неправильной конвертации типов, но это может быть и не так.
У кого есть предположения - буду очень рад почитать!

Среда разработки:C++ Builder 2009.
Тип проекта: Оконное приложение

Заранее всем спасибо!

Последний раз редактировалось JamS007; 07.01.2009 в 20:32.
JamS007 вне форума Ответить с цитированием
Старый 07.01.2009, 21:08   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Попробуйте не приводить типы а просто так переменную перредать.
Потому что в этой строке
Код:
String FileName = (FileSaveDialog1->FileName+'\0').c_str();
Вы итак преобразовуете строку из AnsiString в char.
MaTBeu вне форума Ответить с цитированием
Старый 07.01.2009, 21:15   #3
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

MaTBeu

Не получается. Компилятор всеравно выдает ошибки, может быть я что-то неправильно делаю? Напишите пожалуйста пример.
JamS007 вне форума Ответить с цитированием
Старый 07.01.2009, 21:40   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Хм... а в Билдере есть настройка типа Character Set как в Студии?
Постойте. А зачем вам преобразовывать два раза строку? c_str() - это функция преобразования из AnsiString в char*. А вы берете юникод строку, преобразовываете из контрола в чар, потом с помощью конструктора копирования делаете еще раз юникод строку.
Попробуйте написать вот так
Код:
FILE *Path = fopen((FileSaveDialog1->FileName+'\0').c_str(),"w");
или даже вот так
Код:
FILE *Path = fopen((FileSaveDialog1->FileName).c_str(),"w");    //'\0' не обязательно вручную приписывать
Если вылетит ошибка, что типа невозможно из юникода в чар перекинуть, то ищите настройки кодировки в компиляторе.
MaTBeu вне форума Ответить с цитированием
Старый 07.01.2009, 22:01   #5
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

MaTBeu

Урааа!!! Спастбо Вам БОЛЬШОЕ! Не знаю что бы я без Вас делал!
JamS007 вне форума Ответить с цитированием
Старый 07.01.2009, 23:13   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

И еще совет. Используйте тип AnsiString вместо String. Это избавит вас от проблем с кодировкой.
MaTBeu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение в файл сложной динамической структуры _Инженер_ Общие вопросы Delphi 24 20.10.2008 09:38
Проблема с записью большого файла Rembo Свободное общение 17 17.06.2008 12:47
Проблема структуры else в Delphi jora-objora Помощь студентам 3 03.02.2008 18:10
Проблема с записью в реест eks-s Общие вопросы Delphi 4 02.02.2008 13:42
Проблема с записью в файл...( Regloger Помощь студентам 10 15.11.2007 17:49