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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
nchameleon
2 / 2 / 1
Регистрация: 06.04.2010
Сообщений: 163
#1

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

08.04.2011, 17:25. Просмотров 1288. Ответов 5
Метки нет (Все метки)

Добрый день помогите пожалуста записать значение возвращаемое 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);
Как сделать необходимое преобразование без промежуточных действий?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2011, 17:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приведение типов string.size() к (void*) (C++):

Приведение к void - C++
Доброй ночи! Просматривая код некоторой программы, обнаружил конструкцию следующего вида: void function(char a, char *p) { ...

Приведение void* указателя к типу - C++
struct tParamStruct { const char* Result; }; tParamStruct ParamStruct; void show(void *AdressPS) { // ????????

Приведение void* к типу указателя на структуру - C++
Тема обсуждалась здесь, но решения так и нет нормального Есть два (и более, хоть до 20) линейных списков и функция обхода списка В...

Приведение указателя на void к другому типу? - C++
в поиске смотрел - не помогло! Возникла проблемка: В книге сказано, что указателю на void можно присваивать все типы указателей без...

Приведение void указателя к определенному типу с сохранением результата - C++
Есть функция funс(void *pointer, char type) { ... } Нужно чтобы в данной функции этот указатель приводился к определенному типу...

Приведение типов - C++
Доброго времени суток. Есть вопрос. Допустим: class Base { ..... } class Derived:public Base{ .... }

5
neske
1502 / 869 / 84
Регистрация: 26.03.2010
Сообщений: 2,983
08.04.2011, 17:34 #2
nchameleon, а вы прочитайте про аргументы функций fwrite / fread, сами найдете у себя ошибку.
http://www.cplusplus.com/reference/clibrary/cstdio/fwrite/

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

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

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

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

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

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

Добавлено через 2 минуты
Цитата Сообщение от nchameleon Посмотреть сообщение
а получается результат полученной от функции нельзя преобразовать в нужный мне вид
nchameleon, чтобы получить адрес от результата, тебе нужно выделить для него память. Это можно сделать статически (как это ты и сделал), а можно динамически. Вот адрес выделенной памяти и передается в функцию. По другому сделать в принципе нельзя.
1
08.04.2011, 20:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2011, 20:05
Привет! Вот еще темы с ответами:

Приведение типов - C++
При вводе с клавиатуры s = 11 и a = 1.1, получаем 9. Результат переменной d = 10, это правильно. В чём подвох? int main() { ...

Приведение типов - C++
Есть задача создать список с объектами у которых разные классы, но один базовый предок. Потом нужно перебрать список и если объект одного...

Приведение типов - C++
Уважаемые программеры, ПОМОГИТЕ!!! Нужно (мне) реализовать шаблонную функцию для приведения типов. Пример: newType_cast<T>(“123”); ...

Приведение типов - C++
Добрый вечер! Реализовываю явное и не явное приведение типов. Есть два класса, сепаративных, A и B. Реализацию явного преобразования...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru