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

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

Войти
Регистрация
Восстановить пароль
 
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
#1

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

09.01.2014, 07:49. Просмотров 599. Ответов 11
Метки нет (Все метки)

есть структура
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?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2014, 07:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить размер структуры "вручную" (C++):

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Чтения структуры из файла (описать структуру с именем "ORDER": "счет плательщика"; "счет получателя"; "сумма, переводится банковской операцией") - C++
Описать структуру с именем &quot;ORDER&quot;, содержащий следующие поля: &quot;Счет плательщика&quot;; &quot;Счет получателя&quot;; &quot;Сумма, переводится банковской...

В файл с помощью структуры записать следующие данные: "название папки, ее размер, дата создания" - C++
Добрый день! Есть файл в нем с помощью структуры надо записать такие данные: &quot;название папки,ее размер, и дата создания&quot;. После заполнения...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...

Создание структуры "префиксное дерево". Ошибка "Access violation writing location". - C++
Есть структура данных - бор или префиксное дерево. class trie { char value; // символ узла trie** pointers; // ссылки на...

Заполнить структуры "Прямоугольник" и "Треугольник" и найти площади и периметры фигур - C++
Доброго времени суток! Начали изучать структуры, сижу над задачкой, да вот не идет она у меня. Нужно создать две структуры : -...

11
alsav22
5428 / 4823 / 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/
0
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();
}
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 09:41 #4
Цитата Сообщение от lina13160 Посмотреть сообщение
в том то и дело, что int это порядковый номер будет, а в строках каждый раз разное будет значение, ничего не вводя, выдает уже 172
И что? Размер string - это размер объекта класса string (фиксированный и зависит от реализации). Размер строки, с которой связан этот объект, на размер самого объекта не влияет (в объекте может находиться просто указатель на строку, размер которого фиксированный).
0
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
09.01.2014, 09:43  [ТС] #5
alsav22, размер string фиксирован? у него есть определенное значение?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 09:47 #6
Цитата Сообщение от lina13160 Посмотреть сообщение
размер string фиксирован?
Да.
Цитата Сообщение от lina13160 Посмотреть сообщение
у него есть определенное значение?
Есть. Конкретное значение зависит от реализации. Узнаётся так:
C++
1
sizeof(string);
0
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
09.01.2014, 09:54  [ТС] #7
alsav22,
т.е. в моем случае получается 4 на int и по 28 на каждую строку..
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 10:05 #8
Цитата Сообщение от lina13160 Посмотреть сообщение
alsav22,
т.е. в моем случае получается 4 на int и по 28 на каждую строку..
Это вопрос или рассуждение?
0
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
09.01.2014, 10:11  [ТС] #9
Рассужение..вроде все ясно, но что подразумевалось тогда в ручном подсчете?..раз размер узнается только sizeof'ом..
0
alsav22
5428 / 4823 / 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 посте).
0
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.. это нормально?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.01.2014, 14:00 #12
Цитата Сообщение от lina13160 Посмотреть сообщение
это нормально?
Да, зависит от реализации, компиляторы разные.
1
09.01.2014, 14:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2014, 14:00
Привет! Вот еще темы с ответами:

Определить, какая из точек "В" или "С" расположены ближе к точке "А". - C++
На оси Ох расположены 3 точки А, В и С. Определить, какая из точек &quot;В&quot; или &quot;С&quot; расположены ближе к точке &quot;А&quot;. Предусмотреть вариант...

Структуры "Студент" и "Дата": с чем связана данная ошибка? - C++
С чем связана данная ошибка? //--------------------------------------------------------------------------- /* Составить список группы...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Структуры "Бухгалтер" и "Бухгалтерия". Агрегация - C++
Бухгалтер Для агрегируемой структуры разработать функции ввода вывода, ввода с консоли, сравнения по всем полям. бухгалтерия для...


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

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

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