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

Ошибка доступа на break - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задать строку без нулевого символа http://www.cyberforum.ru/cpp-beginners/thread1233894.html
подскажите как задать строку без нулевого символа? когда пишешь так char str = "hello world" он автоматом добавляется, пробовал даже писать так char str = {'h','e','l'} (ну и т.д.) и все равно добавляется :( а очень надо без нулевого символа...
C++ Помогите найти ошибку: Создать строку символов произвольной длины, заданную диапазоном /*Задание: Создать строку символов произвольной длины. Ввести с клавиатуры начало и конец диапазона в строке. Записать строку без диапазона(т.е. часть справа и часть слева)*/ #include <iostream> #include <stdio.h> using namespace std; int main() { int z=0, t=0; char x, y; http://www.cyberforum.ru/cpp-beginners/thread1233890.html
Релиз консольной программы с SNMP запросами - найти ошибку в коде C++
Привет всем! Я написал программку, которая опрашивает некоторые устройства используя запросы по протоколу SNMP. Программа отлично работает при Start without debugging, но её релизная версия спотыкается в самом начале, а именно при первом запросе. Прошу тыкнуть, где я мог что-то сделать неправильно? Релизную версию получаю запуском Build->Batch build->... Код программы: #include...
C++ Поиск популярного триплета. Конструктивная критика
Добрый день. Недавно помогал решать задачу про триплеты, и захотелось услышать критики по своему коду :D. все-таки только учусь, и она я считаю будет полезной. в первую очередь, хотелось бы услышать: конструктивную критику по коду, советы по улучшению быстродействия алгоритма, может вообще другой алгоритм ;D, ну а потом остальное. принципи тут все простое.. но .. вот что-то захотелось))) ...
C++ Вместо включения используйте закрытое наследование http://www.cyberforum.ru/cpp-beginners/thread1233787.html
Здравствуйте. Изучаю С++ по книге Прата С. "Язык программирования С++. Лекции и упражнения". Столкнулся с проблемой. Есть задание: Выполните еще раз упражнение 1, но вместо включения используйте закрытое наследование. Здесь также могут пригодиться несколько объявлений typedef. Подумайте, как можно применить следующие операторы: PairArray::operator=(PairArray(Arraylnt() , Arraylnt())); ...
C++ Обеспечить работу приложения с БД Firebird на других ПК Добрый день. Есть программа с бд на firebird, как скомпилировать программу так, что бы на компьютере где нет firebird она запускалась и работала? подробнее

Показать сообщение отдельно
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
25.07.2014, 17:51     Ошибка доступа на break
Цитата Сообщение от ulafrl Посмотреть сообщение
А как писать стуктуры со string?
Засада в том, что строка хранит только указатель на данные на куче:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct ppl_age
{
  std::string name;
  int age;
};
 
int main()
{
  ppl_age test;
  std::cout<<"size of empty struct="<<sizeof(test)<<"\n";
  test.name = "this is test string for name";
  std::cout<<"size of filled struct="<<sizeof(test)<<"\n";
  return 0;
}
Причем читал когда-то что есть реализация stl, в которой string хранит данные внутри до определенного объема.

По этому такую структуру читать-писать проще в текстовом режиме:
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <clocale>
#include <algorithm>
#include <sstream>
 
using namespace std;
 
 
struct ppl_age
{
  std::string name;
  int age;
};
 
std::ostream& operator<< (std::ostream& stream, const ppl_age& age_rec)
{
   stream<<age_rec.name;
   stream<<" ";
   stream<<age_rec.age;
   return stream;
}
 
std::istream& operator>> (std::istream& stream, ppl_age& age_rec)
{
   stream>>age_rec.name;
   stream>>age_rec.age;
   return stream;
}
 
bool createTestFile()
{
   std::vector<ppl_age> age_records;
   ppl_age new_age_rec;
   new_age_rec.name = "btest";
   new_age_rec.age = 10;
   age_records.push_back(new_age_rec);
   new_age_rec.name = "btest";
   new_age_rec.age = 20;
   age_records.push_back(new_age_rec);
   new_age_rec.name = "atest";
   new_age_rec.age = 20;
   age_records.push_back(new_age_rec);
   ofstream fout;
   fout.open("ppl.txt");
   if(fout.is_open())
   {
      for(unsigned age_cnt = 0; age_cnt<age_records.size();age_cnt++)
      {
         fout << age_records[age_cnt] << endl;
      }
      fout.close();
   }
   else
   {
      cout << "Can't open output file" << endl;
      return false;
   }
   return true;
}
 
int main()
{
   createTestFile();
   std::vector<ppl_age> age_records;
   ifstream fin;
   fin.open ("ppl.txt");
   if(fin.is_open())
   {
      while(true)
      {
         ppl_age new_age_rec;
         fin>>new_age_rec;
         if(fin.good())
            age_records.push_back(new_age_rec);
         else
            break;
      }
      fin.close();
   }
   for(unsigned age_cnt = 0; age_cnt<age_records.size();age_cnt++)
   {
      cout << age_records[age_cnt] << endl;
   }
   system ("pause");
   return 0;
}


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