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

Определить размер структуры "вручную" - C++

Восстановить пароль Регистрация
 
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
09.01.2014, 07:49     Определить размер структуры "вручную" #1
есть структура
C++
1
2
3
4
5
6
7
8
9
10
11
struct table{
    int nomer;
    string surname;
    string name;
    string otch;
    string adress;
    string poruch;
    string age;
 
};
cout << sizeof (table);
показывает 172.
Как это проверить в ручную?
Сколько будет тут int?
Сколько string?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2014, 07:49     Определить размер структуры "вручную"
Посмотрите здесь:

C++ Определить, сколько в строке символов "*", ":", ";"
C++ Определить количество слов, которые содержат ровно четыре буквы "о", "О"
C++ Определить длину каждого слова. Удалить все буквы "а" и "о" с фамилии
В файл с помощью структуры записать следующие данные: "название папки, ее размер, дата создания" C++
C++ Структуры "Студент" и "Дата": с чем связана данная ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 08:31     Определить размер структуры "вручную" #2
Цитата Сообщение от lina13160 Посмотреть сообщение
Сколько будет тут int?
1.
Цитата Сообщение от lina13160 Посмотреть сообщение
Сколько string?
6.

Добавлено через 1 минуту
C++
1
cout << sizeof(int) + 6 * sizeof(string) << endl;
Добавлено через 5 минут
http://habrahabr.ru/post/142662/
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
09.01.2014, 09:40  [ТС]     Определить размер структуры "вручную" #3
Добавлено через 1 минуту
alsav22,
в том то и дело, что int это порядковый номер будет, а в строках каждый раз разное будет значение, ничего не вводя, выдает уже 172

Добавлено через 8 минут
если вдруг важно вот полный текст программы
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <conio.h>
#include <string>
#include <stdlib.h>
#include <Windows.h>
using namespace std;
string probel(int max, int now){
    string a;
    a.clear();
    for(int i=0; i<(max-now); i++){
        a.append(" ");
    }
    return a;
}
 
void main(){
    string s;
struct table{
    int nomer;
    string surname;
    string name;
    string otch;
    string adress;
    string poruch;
    string age;
 
};
int count=0,back_summa,flag_summ=0;
int d_f=0,d_n=0,d_o=0,d_s=0,d_p=0,d_d=0,d_k=0,d_a=0;
string backup;
string line;
char accept=NULL;
table otpusk[100];
setlocale(LC_ALL,"Russian");
cout << "Введите данные в форме (ФИО ДомашнийАдрес Поручение Возраст) (Ввод только английских символов)" << endl << endl;
while(accept != 'n'){
otpusk[count].nomer = count+1;
cout << "Введите (ФИО)" << endl;
cin >> otpusk[count].surname;
cin >> otpusk[count].name;
cin >> otpusk[count].otch;
cout << "Введите Домашний адрес" << endl;
cin >> otpusk[count].adress;
cout << "Введите Поручение" << endl;
cin >> otpusk[count].poruch;
cout << "Введите Возраст" << endl;
cin >> otpusk[count].age;
 
d_f=max(d_f,otpusk[count].surname.length());
 
d_n=max(d_n,otpusk[count].name.length());
 
d_o=max(d_o,otpusk[count].otch.length());
 
d_d=max(d_d,otpusk[count].adress.length());
d_k = max(d_k,otpusk[count].poruch.length());
d_a = max(d_a,otpusk[count].age.length());
count++;
cout << "Хотите добавить данные? y/n "<< endl;
cin >> accept;
}
 
cout << endl << "Формирование списка..." << endl;
Sleep(2000);
string lenint;
 
lenint =  "| Ф" + probel(d_f,0) + "| И" + probel(d_n,0) + "| О" + probel(d_o,0) + "| Adress" + probel(d_d,5) + "| Poruchenie" + probel(d_k,10) +  "| Age" + probel(d_a,0) + "|" ;
 
for(int i=0; i<(lenint.length()); i++){
    cout << "-";
}
cout << endl << lenint;
 
 
for (int i=0; i<count; i++){
 
cout << endl;
for(int i=0; i<(lenint.length()); i++){
    cout << "-";
}
cout  << endl <<  "| " << otpusk[i].surname  << probel(d_f,otpusk[i].surname.length()) << " | " << otpusk[i].name << probel(d_n,otpusk[i].name.length()) << " | " << otpusk[i].otch << probel(d_o,otpusk[i].otch.length()) << " | " << otpusk[i].adress << probel(d_d,otpusk[i].adress.length()) << " |"<< otpusk[i].poruch << probel(d_k,otpusk[i].poruch.length()) << " |"<< otpusk[i].age << probel(d_a,otpusk[i].age.length()) << " |";
Sleep(100);
}
cout << endl;
for(int i=0; i<(lenint.length()); i++){
    cout << "-";
}
 
_getch();
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 09:41     Определить размер структуры "вручную" #4
Цитата Сообщение от lina13160 Посмотреть сообщение
в том то и дело, что int это порядковый номер будет, а в строках каждый раз разное будет значение, ничего не вводя, выдает уже 172
И что? Размер string - это размер объекта класса string (фиксированный и зависит от реализации). Размер строки, с которой связан этот объект, на размер самого объекта не влияет (в объекте может находиться просто указатель на строку, размер которого фиксированный).
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
09.01.2014, 09:43  [ТС]     Определить размер структуры "вручную" #5
alsav22, размер string фиксирован? у него есть определенное значение?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 09:47     Определить размер структуры "вручную" #6
Цитата Сообщение от lina13160 Посмотреть сообщение
размер string фиксирован?
Да.
Цитата Сообщение от lina13160 Посмотреть сообщение
у него есть определенное значение?
Есть. Конкретное значение зависит от реализации. Узнаётся так:
C++
1
sizeof(string);
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
09.01.2014, 09:54  [ТС]     Определить размер структуры "вручную" #7
alsav22,
т.е. в моем случае получается 4 на int и по 28 на каждую строку..
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 10:05     Определить размер структуры "вручную" #8
Цитата Сообщение от lina13160 Посмотреть сообщение
alsav22,
т.е. в моем случае получается 4 на int и по 28 на каждую строку..
Это вопрос или рассуждение?
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
09.01.2014, 10:11  [ТС]     Определить размер структуры "вручную" #9
Рассужение..вроде все ясно, но что подразумевалось тогда в ручном подсчете?..раз размер узнается только sizeof'ом..
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 10:23     Определить размер структуры "вручную" #10
Цитата Сообщение от lina13160 Посмотреть сообщение
но что подразумевалось тогда в ручном подсчете?
Трудно сказать. Может быть вот это:
C++
1
cout << sizeof(int) + 6 * sizeof(string) << endl;
, в отличие от этого:
C++
1
cout << sizeof (table);
Кстати, может не совпадать (почему - ссылка во 2 посте).
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
09.01.2014, 13:17  [ТС]     Определить размер структуры "вручную" #11
alsav22, все слава богу совпадает. Ну надеюсь этого будет достаточно..Спасибо большое

Добавлено через 2 часа 52 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
struct table{
     int nomer;
    string surname;
    string name;
    string otch;
    string adress;
    string poruch;
};
cout << sizeof(int)<<endl;
    cout <<  sizeof(string) << endl;
    return 0;
}
в qt creatore по 4 пишет, в visual 2012 инт 4 строка 28.. это нормально?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2014, 14:00     Определить размер структуры "вручную"
Еще ссылки по теме:

C++ Структуры "Студент" и "Стипендия"
Структуры "Товар", "Магазин" C++
Структуры "Хозяйство" и "Машины" C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 14:00     Определить размер структуры "вручную" #12
Цитата Сообщение от lina13160 Посмотреть сообщение
это нормально?
Да, зависит от реализации, компиляторы разные.
Yandex
Объявления
09.01.2014, 14:00     Определить размер структуры "вручную"
Ответ Создать тему
Опции темы

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