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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2012, 15:24   #1
tema654
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 49
Радость Удаление кракозябр при записи в файл

Здравствуйте!
Как удалить крякозябры при записи в файл?

Код:
 struct vvod {char family[15]; char name[10];} dat;
void CMyDialog2::OnBnClickedButton1()
{FILE *f; 
f=fopen("bdss.txt","wb+");
UpdateData();
memcpy(dat.name,(char *)edt2.GetBuffer(),10); 
memcpy(dat.family,(char *)edt1.GetBuffer(),15);
fwrite(&dat,1,sizeof(dat),f);
UpdateData(false);
fclose(f);
Спасибо!
tema654 вне форума Ответить с цитированием
Старый 23.03.2012, 16:01   #2
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

вы не очищаете буфер перед записью данных в него
Код:
ZeroMemory(&dat,sizeof(dat));
как это у вас получается
Код:
memcpy(dat.name,(char *)edt2.GetBuffer(),10);
вы берёте указатель на буфер и копируете из него 10 байт, а если строка меньше то конечно он захватит мусор, если я правильно помню в у cedit есть метод GetWindowText
Код:
struct vvod {char family[15]; char name[10];} dat;
void CMyDialog2::OnBnClickedButton1()
{ZeroMemory(&dat,sizeof(dat));
FILE *f; 
f=fopen("bdss.txt","wb+");
UpdateData();
edt2.GetWindowText(dat.name,10);
edt1.GetWindowText(dat.family,15);
fwrite(&dat,1,sizeof(dat),f);
UpdateData(false);
fclose(f)

Последний раз редактировалось microbit; 23.03.2012 в 16:03.
microbit вне форума Ответить с цитированием
Старый 23.03.2012, 17:13   #3
tema654
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 49
По умолчанию

Спасибо! все получилось
А как теперь вывести в файл? как обычно ?
ну т.е.
Код:
FILE *f; 
char sss[100]; 
//LPCTSTR sss = new TCHAR[300]; 
    f = fopen("Bdss.txt","r+"); 
    if(f != 0){
       while(!feof(f)){ 
       fgets(sss,100,f);
        m_list1.AddString(sss); 
        }
    }
    fclose(f);
UpdateData(FALSE);
таким образом выводится только первое слово..
подскажите плиз )
tema654 вне форума Ответить с цитированием
Старый 23.03.2012, 17:27   #4
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

читайте как и записывали, примерно так
Код:
FILE *f; 
    f = fopen("Bdss.txt","r+"); 
    if(f != 0){
       while(!feof(f)){
		fread(&dat,1,sizeof(dat),f);
		m_list1.AddString(dat.name); 
		m_list1.AddString(dat.family); 
        }
    }
    fclose(f);
microbit вне форума Ответить с цитированием
Старый 25.03.2012, 17:11   #5
tema654
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 49
По умолчанию

Создал новый проект. с чистого листа хотел начать.
и вот ошибка сразу же. уже не знаю что делать, можете посмотреть ?
http://rghost.ru/37213528
п.с. не получается у меня вложить файл, либо вылетает, либо не грузится

Последний раз редактировалось tema654; 25.03.2012 в 17:21.
tema654 вне форума Ответить с цитированием
Старый 25.03.2012, 17:27   #6
tema654
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 49
По умолчанию

все, не надо, решил путем использования многобайтовой кодировки
tema654 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
файлы(си) ошибка при записи в файл jana89 Общие вопросы C/C++ 2 23.11.2011 12:13
ошибка при записи в типизированный файл phasha Паскаль, Turbo Pascal, PascalABC.NET 5 18.04.2011 00:05
Непонятное при записи в файл Exeil Общие вопросы C/C++ 0 27.11.2010 20:24