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

Как перевести строку в читабельный вид? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перегрузка конструктора копирования и оператора присвоения http://www.cyberforum.ru/cpp-beginners/thread444377.html
Всем привет, сразу к делу. После прочтения 11 главы Лафоре столкнулся с такой бедой как понятие перегрузка оператора присвоения. Дело в том что Лафоре говорит что именно оператор присвоения является уникальным и не наследуется. Но когда создаёшь указатель на базовый класс там естественно делаешь все методы виртуальными (для полиморфизма), при раз адресации указателя происходит вызов...
C++ Дальнейшее изучение С++ Вот хотел у вас спросить, что дальше можно почитать после Бьярне Страуструп Программирование: принципы и практика использования C++, и после Р.Лафоре ООП в С++, планирую купить по WinApi и что то еще хотел у вас спросить что можно еще купить почитать http://www.cyberforum.ru/cpp-beginners/thread444347.html
полноэкранный режим консоли C++
Здравствуйте! Не могли бы подсказать, как программно переходить в полноэкранный режим в консоле? (Именно переходить, а не получать информацию, является ли режим полноэранным) Добавлено через 19 минут Функцию нашёл тут, только возникают ошибки. Код программы: #include <windows.h>; #include <wincon.h>;
C++ Преобразовать выражение в постфиксную форму
Преобразовать выражение, составленное из цифр и знаков арифметических операций (+,-,*,/) в постфиксную форму. В постфиксной форме сначала записываются операнды, а затем знак операции. Обычная запись 3+4 (5-4)*2 2*(3+4)*5 Постфиксная запись 3 4 + 5 4 – 2 * 2 3 4 + * 5 *
C++ Построить некоторый Автомат на три команды http://www.cyberforum.ru/cpp-beginners/thread444324.html
Некоторый автомат может запросить два числа и выполнить 3 команды. Команда А преобразует имеющуюся пару чисел (х, у) в (х-у,у), команда В преобразует пару чисел (х,у) в пару (х+у,у), команда С преобразует пару чисел (х,у) в пару (у,х). Составьте алгоритм и программу работы автомата.
C++ Векторы Определите полусумму длин двух векторов А(1,5; 2,5; -0,3) и В(-11,7; -9,3; 2,5; 3,7; -1,2). Вычислите, длины вектора оформив в виде функции. подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
13.02.2012, 13:31     Как перевести строку в читабельный вид?
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Суть в следующем каждому неинициализированному 1-му сконца элементу вектора vec прилепливаем память субвектора add из 2-х элементов, таким образом в блоке vec расширяем на 1-ку конечный маркер использованой памяти, а тем временем "убиваем" наш субвектор add. В общем "обманываем систему - двигая маркер конца использованного блока)
Давай смоделируем твой поведение на коротеньком примере. Уж извини за исползование printf'а, но я никак не могу запомнить, как через cout в 16-ричном виде печатать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int main (void)
{
  char *lpw = new char[2];
  char *add;
  long nchr = 0;
 
  for (int i = 0; i < 100; i++)
    {
      lpw[nchr] = 0x80 + i;
      nchr++;
      add = new char[2];
      lpw[nchr] = add[0];
    }
 
  for (int i = 0; i < 100; i++)
    printf ("%02x ", (unsigned char) lpw[i]);
  printf ("\n");
 
  return 0;
}
При исполнении получим следующее и как бы тут всё нормально:

Код
80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df e0 e1 e2 e3
Теперь в код введём три новых указателя, для которых сделано динамическое выделение памяти, заполним их значениями, а в конце распечатаем:

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
#include <stdio.h>
 
int main (void)
{
  char *lpw = new char[2];
  char *add;
  long nchr = 0;
 
  int *pa = new int;
  *pa = 0x11111111;
  int *pb = new int;
  *pb = 0x22222222;
  int *pc = new int;
  *pc = 0x33333333;
 
  for (int i = 0; i < 100; i++)
    {
      lpw[nchr] = 0x80 + i;
      nchr++;
      add = new char[2];
      lpw[nchr] = add[0];
    }
 
#if 0
  for (int i = 0; i < 100; i++)
    printf ("%02x ", (unsigned char) lpw[i]);
  printf ("\n");
#endif
 
  printf ("*pa = 0x%x\n", *pa);
  printf ("*pb = 0x%x\n", *pb);
  printf ("*pc = 0x%x\n", *pc);
 
  return 0;
}
При исполнении получим:

Код
*pa = 0x93929190
*pb = 0xa3a2a1a0
*pc = 0xb3b2b1b0
Внимание вопрос! Почему значения, записанные по указателям pa, pb и pc испортились?

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
(в разделе экспертов рассматривали рассматривали и так никто и не привёл такой вариант выделения памяти)
Если правильно ответишь на предыдущий вопрос, то очевидным образом поймёшь, почему такой вариант никто не приводил
 
Текущее время: 02:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru