9 / 7 / 0
Регистрация: 09.08.2012
Сообщений: 79
1

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

24.11.2014, 00:15. Показов 1041. Ответов 6
Метки нет (Все метки)

Всем привет! Есть простейшая задача: использовать вместо строки массив символов. В этом массиве символов надо найти последнее вхождение какого-то символа. Пусть это будет '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";
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2014, 00:15
Ответы с готовыми решениями:

stack around the variable was corrupted
Программа заканчивает работу а потом выбивает: stack around the variable 'koef' was corrupted В...

Stack around the variable 'i' was corrupted
Создать массив указателей на функцию. Ввести цифру, которая обозначает функцию, которую необходимо...

Stack around the variable 'e' was corrupted
Программа работает, но после закрытия консоли пишет ошибку &quot;Stack around the variable 'e' was...

Stack around the variable was corrupted
Здравствуйте! Есть код и ошибка, которую не могу найти в коде 2 суток. Может кто-то заметит. Слышал...

6
3174 / 1933 / 313
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
24.11.2014, 00:22 2
Цитата Сообщение от Megatron13 Посмотреть сообщение
Вроде же все правильно делаю
Все неправильно.

char qu[]="";
0
9 / 7 / 0
Регистрация: 09.08.2012
Сообщений: 79
24.11.2014, 00:29  [ТС] 3
Цитата Сообщение от gazlan Посмотреть сообщение
Все неправильно.
char qu[]="";
Ок, но с char *qu = new char[]; вообще не работает. Так как все-таки сделать правильно? Я намек не понял.
0
3174 / 1933 / 313
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
24.11.2014, 00:45 4
Лучший ответ Сообщение было отмечено Megatron13 как решение

Решение

Цитата Сообщение от 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  
1
9 / 7 / 0
Регистрация: 09.08.2012
Сообщений: 79
24.11.2014, 03:39  [ТС] 5
Цитата Сообщение от gazlan Посмотреть сообщение
Код C++
Спасибо! Конечно, задача была найти последнее вхождение, а не первое, да и MAX_PATH работает только с #include <windows.h>, но сам бы я до этого не допер бы наверное вообще. Спасибо огромное!

Добавлено через 18 минут
Но все же, почему использовать именно константу, определяющую максимальную длину пути в Winodows?
0
3174 / 1933 / 313
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
24.11.2014, 06:42 6
Цитата Сообщение от Megatron13 Посмотреть сообщение
именно константу
Стандартная практика :-)

Ближайшая, известная всем по имени и хорошо подходящая по размеру константа. Редко встречается код, где используется что-либо другое.
0
С чаем беда...
Эксперт CЭксперт С++
10008 / 5354 / 1467
Регистрация: 18.10.2014
Сообщений: 12,909
24.11.2014, 07:19 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;
Однако такой подход, к сожалению, не дает вам понять, прочиталась ли вся строка целиком, или была обрублена установленным лимитом.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2014, 07:19
Помогаю со студенческими работами здесь

Stack around the variable 's' was corrupted
Помогите разобраться! Не пойму почему иногда при использовании в программе переменных char при...

Stack around the variable 's' was corrupted
Помогите, пожалуйста, решить проблему.При большом вводе: &quot;Stack around the variable 's' was...

Stack around the variable 'b' was corrupted
Помогите разобраться почему вот эта программа: #include &lt;stdio.h&gt; int main() { short b,k=0;...

Stack around the variable was corrupted
void main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); double c,x,y,f; char k;...

Stack around the variable was corrupted
Здравствуйте, при решении задания по созданию класса возникла ошибка Run-Time Check Failure #2 -...

Stack around the variable was corrupted
Здравствуйте! Имею следующий код: #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru