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

Можно ли записывать объекты класса string в память, чтоб потом их прочитать? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Открыть существующий текстовый файл и копировать его в новый файл, с заменой всех букв нижнего регистра http://www.cyberforum.ru/cpp-beginners/thread865470.html
напишите программу, которая бы открывала существующий текстовый файл и копировала его в новый файл, с заменой всех букв нижнего регистра на соответствующие буквы нижнего реестра, остальное оставить без изменения
C++ Как сделать вывод в таблице? c++ как сделать вывод в таблице. Чтобы вывод выводился не 1 раз, а много раз и окно не закрывалось. http://www.cyberforum.ru/cpp-beginners/thread865469.html
C++ функции работы с памятью
нужно реализовать свою функцию memcpy. #include <iostream> using std::cout; using std::endl; using std::cin; void* my_memcpy(void*, const void*, size_t n); int main()
Вычислить sin (ввод с клавиатуры) C++
Подскажите как вычислить sin (ввод с клавиатуры) Заранее спасибо.
C++ простая анимация C++ http://www.cyberforum.ru/cpp-beginners/thread865450.html
нужно сделать анимацию бегущего человека !!! анимация простая в С++ !!! спасайте пожалуйста ! анимация типо того #include <iostream> #include <windows.h> int main() { while ( true ) { std::cout << " {smoke} \n" << " O- \n"
C++ Как применить матрицу поворота к изображению? Всем привет! Будьте добры объясните как применять матрицу поворота к массиву. Массив, конечно, одномерный: rgbQuad* bmp; где размер width*hight; Как считать поворот пикселей для такого массива? Желательно без потерь! подробнее

Показать сообщение отдельно
stima
431 / 286 / 16
Регистрация: 22.03.2011
Сообщений: 932
Завершенные тесты: 1
16.05.2013, 02:22     Можно ли записывать объекты класса string в память, чтоб потом их прочитать?
Вы знаете что sizeof это размер типа?
C++
1
2
3
4
5
6
7
class A          // это тип класс А
{ 
     int a;       // это тип int 
     int b;       // это тип тоже int
};
sizeof(A) == sizeof(int) + sizeof(int) // размер класса это размер всех его переменных 
                                                 //+ втб + выравнивание, но об этом узнаешь позже
Вы понимаете что с std::string это класс удобными методами доступа к char* (где char* это массив char)?
А значит для std::string (припустим он реализован так, ведь мы можем написать свой!)) главное интерфейс)))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace std
{
template<....>
class string
{
 
 
private:
   char *buff;                 // это тип указатель
   int size;                     // это тип int
   int capacity;               // это тип int
};
}
 
sizeof(std::string) == sizeof(char*) + sizeof(int) + sizeof(int)

Вы понимаете что
C++
1
std::string str ("1234567890");
Это 10 раз по char == str.size() * sizeof(char)

Со всем вышесказанным можно подитожить
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <string>
#include <fstream>
#include <iostream>
 
using namespace std;
 
int main()
{
    fstream fs;
    string str = "Data", str2;
 
    fs.open("file.dat", ios::out | ios::binary);
    if (!fs.is_open())
         return 1;
  
    fs.write(str.c_str(), str.size() * sizeof(char));
    fs.close();
 
    fs.open("file.dat", ios::in | ios::binary);
    if (!fs.is_open())
         return 1;
    
    str2.resize(str.size());
    fs.read(&str2[0], str.size() * sizeof(char));
 
    cout << str2 << endl;
    std::cin.get();
 
    return 0;
}
 
Текущее время: 05:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru