Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

GetOpenFileName

52K
18 февраля 2010 года
Karpo
12 / / 04.12.2009
Здравствуйте.У меня возникла проблемка.Я получаю путь к файлу через функцию GetOpenFileName.Этот путь должен храниться в буфере,который я задаю глобально.Но при попытке вывести это путь любым способом возникает ошибка
 
Код:
Unhandled exception at 0x004f52fb in Klient2.exe: 0xC0000005: Access violation reading location 0xfffffff4

Вот мой код:
Код:
void CKlient2Dlg::OnBnClickedButton4()
{
   
    ZeroMemory(&m_text2, sizeof(m_text2));
    int i;
    OPENFILENAME put;
    HWND hwnd=GetSafeHwnd();              // окно - владелец
    ZeroMemory(&put, sizeof(put));
    put.lStructSize=sizeof(put);
    put.hwndOwner=hwnd;
    put.lpstrFile=szFile;
    put.nMaxFile = sizeof(szFile);
    put.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
    put.nFilterIndex = 1;
    put.lpstrFileTitle = NULL;
    put.nMaxFileTitle = 0;
    put.lpstrInitialDir = NULL;
    put.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
    GetOpenFileName(&put);
    //m_text2.Format(_T("%s"), szFile);
    //m_text2=szFile;
    //m_text2=(CString)put.lpstrFile;
    for(i=0;i<260;i++)
    m_text2=m_text2+szFile;// здесь вылетает ошибка
    UpdateData(FALSE);
}

Вот так объявляется буфер
 
Код:
char szFile[260];

Помогите пожалуйста.Я уже всё перепробовал
397
18 февраля 2010 года
SergPas
527 / / 03.02.2007
Цитата:
for(i=0;i<260;i++)
m_text2=m_text2+szFile;// здесь вылетает ошибка


Почитайте про работу со строками как с массивами.

 
Код:
strcpy(m_text2, szFile);
52K
18 февраля 2010 года
Karpo
12 / / 04.12.2009
Нет.Проблема не в этом.Ошибка совсем другого рода.Мой способ всегда исправно работал.А теперь не работает(как и Ваш).Суть в том,что функция GetOpenFileName запрещает мне считывать данные из поля lpstrFile структуры OPENFILENAME и буфера,который я присвоил этому полю.Даже такой код
 
Код:
char rt;
rt=szFile[0];

выдаёт системную ошибку Debug Assertion Failed во время исполнения строки присваивания
3
18 февраля 2010 года
Green
4.8K / / 20.01.2000
Где и как у тебя определен szFile ?
Что такое m_text2 ?

Вот это
 
Код:
ZeroMemory(&m_text2, sizeof(m_text2));

вместе с вот этим
 
Код:
m_text2=m_text2+szFile;

выглядит крайне странно
3
18 февраля 2010 года
Green
4.8K / / 20.01.2000
Цитата: Karpo
А теперь не работает(как и Ваш).


После такого

 
Код:
ZeroMemory(&m_text2, sizeof(m_text2));

это работать не будет:
 
Код:
strcpy(m_text2, szFile);


Присоединяюсь к совету SergPas, разберись с C-string.
52K
18 февраля 2010 года
Karpo
12 / / 04.12.2009
Всем спасибо.Я разобрался.Проблема была в строке
 
Код:
ZeroMemory(&m_text2, sizeof(m_text2));

Убрал её и мой вариант
 
Код:
for(i=0;i<260;i++)
    m_text2=m_text2+szFile;

Заработал,а функция strcpy не работает,так как у неё первый параметр char*,и Cstring'у там не место.
Ещё раз спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог