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

Приведение типов string.size() к (void*) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
nchameleon
2 / 2 / 1
Регистрация: 06.04.2010
Сообщений: 161
08.04.2011, 17:25     Приведение типов string.size() к (void*) #1
Добрый день помогите пожалуста записать значение возвращаемое string.size() в фаил
C++
1
2
3
4
5
6
7
8
9
FILE * fp;
fp = fopen("C:\\T01.txt","rb");
std::string ddd = "___ПРИВЕД___";
fwrite(ddd.size(),sizeof(int),1,fp);   // Ошибка: error C2664: fwrite: невозможно преобразовать параметр 1 из 'unsigned int' в 'const void *'
fwrite(ddd.length(),sizeof(int),1,fp); // Ошибка:
// если сделать
int k = ddd.size();
fwrite(&k,sizeof(int),1,fp); // работает
fclose(fp);
Как сделать необходимое преобразование без промежуточных действий?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
08.04.2011, 17:34     Приведение типов string.size() к (void*) #2
nchameleon, а вы прочитайте про аргументы функций fwrite / fread, сами найдете у себя ошибку.
http://www.cplusplus.com/reference/c...cstdio/fwrite/

Первый аргумент - адрес, а не само значение.
nchameleon
2 / 2 / 1
Регистрация: 06.04.2010
Сообщений: 161
08.04.2011, 18:28  [ТС]     Приведение типов string.size() к (void*) #3
так я и не могу получить адрес в выражении
fwrite(&ddd.size(),sizeof(int),1,fp); // ошибка

и не пойму как привести к правильному виду.

Добавлено через 41 секунду
может как то можно получить адрес переменной длины ?
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
08.04.2011, 18:37     Приведение типов string.size() к (void*) #4
C++
1
&ddd.size()
- ты пытаешься получить несуществующий адрес. Разве значение ddd.size () у тебя где-то сохранено в памяти? - нет.

А чем не нравится вариант, который приведен у тебя?
C++
1
2
int size = ddd.size ();
fwrite(&size, sizeof(int), 1, fp);
nchameleon
2 / 2 / 1
Регистрация: 06.04.2010
Сообщений: 161
08.04.2011, 18:54  [ТС]     Приведение типов string.size() к (void*) #5
дополнительное действие, получается загромождение когда при чтении

вообще я пишу функции сохранения класса в котором хранятся данные в виде нескольких таблиц

Добавлено через 57 секунд
а получается результат полученной от функции нельзя преобразовать в нужный мне вид
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
08.04.2011, 20:05     Приведение типов string.size() к (void*) #6
nchameleon, кстати, а зачем в данном случае использовать fwrite? Может лучше обойтись fprintf?
Или средствами С++, если уж на то пошло (т.е. если уж ты пишешь не на С, а на С++)?

Добавлено через 2 минуты
Цитата Сообщение от nchameleon Посмотреть сообщение
а получается результат полученной от функции нельзя преобразовать в нужный мне вид
nchameleon, чтобы получить адрес от результата, тебе нужно выделить для него память. Это можно сделать статически (как это ты и сделал), а можно динамически. Вот адрес выделенной памяти и передается в функцию. По другому сделать в принципе нельзя.
Yandex
Объявления
08.04.2011, 20:05     Приведение типов string.size() к (void*)
Ответ Создать тему
Опции темы

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