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

Строка как массив символов. Stack around the variable 'qu' was corrupted - C++

Восстановить пароль Регистрация
 
Megatron13
9 / 7 / 1
Регистрация: 09.08.2012
Сообщений: 79
24.11.2014, 00:15     Строка как массив символов. Stack around the variable 'qu' was corrupted #1
Всем привет! Есть простейшая задача: использовать вместо строки массив символов. В этом массиве символов надо найти последнее вхождение какого-то символа. Пусть это будет 'l'.
Массив символов не указан какой должен быть, но скорее всего он должен быть динамическим. Со статическим получается все норм, а вот с динамическим все вроде работает, но после выполнения программы вылезает предупреждение, что я вылез за границы массива:
Stack around the variable 'qu' was corrupted.
Из-за чего я вылезаю за границы массива? Вроде же все правильно делаю.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        char qu[]="";
    cin >> qu;
    int i = 0;
    while (qu[i]!='\0'){
        cout << qu[i];
        i++;
    }
    cout  << endl;
    
    int m;
    i = 0;
    while (qu[i] != '\0'){
        if (qu[i] == 'l'){
            m = i;
        }
        i++;
    }
    
    cout << "i = " << m << "\n";
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 00:15     Строка как массив символов. Stack around the variable 'qu' was corrupted
Посмотрите здесь:

C++ Stack around the variable 'b' was corrupted
stack around the variable was corrupted C++
C++ Бинарные файлы и Stack around the variable was corrupted
Stack around the variable 's' was corrupted C++
C++ Stack around the variable was corrupted
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
2863 / 1811 / 272
Регистрация: 27.08.2010
Сообщений: 4,910
Записей в блоге: 1
24.11.2014, 00:22     Строка как массив символов. Stack around the variable 'qu' was corrupted #2
Цитата Сообщение от Megatron13 Посмотреть сообщение
Вроде же все правильно делаю
Все неправильно.

char qu[]="";
Megatron13
9 / 7 / 1
Регистрация: 09.08.2012
Сообщений: 79
24.11.2014, 00:29  [ТС]     Строка как массив символов. Stack around the variable 'qu' was corrupted #3
Цитата Сообщение от gazlan Посмотреть сообщение
Все неправильно.
char qu[]="";
Ок, но с char *qu = new char[]; вообще не работает. Так как все-таки сделать правильно? Я намек не понял.
gazlan
2863 / 1811 / 272
Регистрация: 27.08.2010
Сообщений: 4,910
Записей в блоге: 1
24.11.2014, 00:45     Строка как массив символов. Stack around the variable 'qu' was corrupted #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Megatron13 Посмотреть сообщение
как все-таки сделать правильно?
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
#include <iostream>
 
int main(int argc,char** argv)
{  
   char     qu[MAX_PATH] = "";
 
   std::cin >> qu;
   
   for (int ii = 0; qu[ii]; ++ii)
   {
       std::cout << qu[ii];
   }
 
   std::cout << std::endl;
   
   for (int jj = 0; qu[jj]; ++jj)
   {
       if (qu[jj] == 'l')
       {
         std::cout << "i = " << jj << std::endl;
 
         break;
       }
   }
   
   return 0;
}
Миниатюры
Строка как массив символов. Stack around the variable 'qu' was corrupted  
Megatron13
9 / 7 / 1
Регистрация: 09.08.2012
Сообщений: 79
24.11.2014, 03:39  [ТС]     Строка как массив символов. Stack around the variable 'qu' was corrupted #5
Цитата Сообщение от gazlan Посмотреть сообщение
Код C++
Спасибо! Конечно, задача была найти последнее вхождение, а не первое, да и MAX_PATH работает только с #include <windows.h>, но сам бы я до этого не допер бы наверное вообще. Спасибо огромное!

Добавлено через 18 минут
Но все же, почему использовать именно константу, определяющую максимальную длину пути в Winodows?
gazlan
2863 / 1811 / 272
Регистрация: 27.08.2010
Сообщений: 4,910
Записей в блоге: 1
24.11.2014, 06:42     Строка как массив символов. Stack around the variable 'qu' was corrupted #6
Цитата Сообщение от Megatron13 Посмотреть сообщение
именно константу
Стандартная практика :-)

Ближайшая, известная всем по имени и хорошо подходящая по размеру константа. Редко встречается код, где используется что-либо другое.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2014, 07:19     Строка как массив символов. Stack around the variable 'qu' was corrupted
Еще ссылки по теме:

C++ Stack around the variable 'cif' was corrupted
C++ Stack around the variable was corrupted
Stack around the variable 'stat_c1' was corrupted C++

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

Или воспользуйтесь поиском по форуму:
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2908 / 1444 / 397
Регистрация: 18.10.2014
Сообщений: 2,662
24.11.2014, 07:19     Строка как массив символов. Stack around the variable 'qu' was corrupted #7
Цитата Сообщение от Megatron13 Посмотреть сообщение
Но все же, почему использовать именно константу, определяющую максимальную длину пути в Winodows?
Использовать можно любую константу "достаточной" величины. Использовать для этих целей именно 'MAX_PATH' - невероятная профанация. В вашем случае строка не имеет никакого отношения к путям в Виндовс, что означает, что ни каком 'MAX_PATH' не может быть и речи. Забудьте про 'MAX_PATH'. Используйте 512, 1024 или 2048 или еще что-нибудь, но не 'MAX_PATH'.

При этом надо понимать, что какую бы константу вы ни выбрали, все равно будет происходить разрушение стека, если пользователь введет строку большей длины. Поэтому вот так запросто решить эту задачу невозможно.

При фиксированном размере массива стоит ограничить максимально допустимое количество введенных символов этим размером

C++
1
2
3
char qu[1024];
...
cin >> setw(sizeof qu) >> qu;
Однако такой подход, к сожалению, не дает вам понять, прочиталась ли вся строка целиком, или была обрублена установленным лимитом.
Yandex
Объявления
24.11.2014, 07:19     Строка как массив символов. Stack around the variable 'qu' was corrupted
Ответ Создать тему
Опции темы

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