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

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

Войти
Регистрация
Восстановить пароль
 
Megatron13
9 / 7 / 1
Регистрация: 09.08.2012
Сообщений: 79
#1

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

24.11.2014, 00:15. Просмотров 257. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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 was corrupted - C++
Здравствуйте! Есть код и ошибка, которую не могу найти в коде 2 суток. Может кто-то заметит. Слышал то, что за пределы массива выхожу, но в...

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

Stack around the variable was corrupted - C++
Здравствуйте! Имею следующий код: #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; void main() { const int arr =...

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

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

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

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

char qu[]="";
0
Megatron13
9 / 7 / 1
Регистрация: 09.08.2012
Сообщений: 79
24.11.2014, 00:29  [ТС] #3
Цитата Сообщение от gazlan Посмотреть сообщение
Все неправильно.
char qu[]="";
Ок, но с char *qu = new char[]; вообще не работает. Так как все-таки сделать правильно? Я намек не понял.
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
24.11.2014, 00:45 #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;
}
1
Миниатюры
Строка как массив символов. Stack around the variable 'qu' was corrupted  
Megatron13
9 / 7 / 1
Регистрация: 09.08.2012
Сообщений: 79
24.11.2014, 03:39  [ТС] #5
Цитата Сообщение от gazlan Посмотреть сообщение
Код C++
Спасибо! Конечно, задача была найти последнее вхождение, а не первое, да и MAX_PATH работает только с #include <windows.h>, но сам бы я до этого не допер бы наверное вообще. Спасибо огромное!

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

Ближайшая, известная всем по имени и хорошо подходящая по размеру константа. Редко встречается код, где используется что-либо другое.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3943 / 2167 / 553
Регистрация: 18.10.2014
Сообщений: 3,783
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
24.11.2014, 07:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2014, 07:19
Привет! Вот еще темы с ответами:

Stack around the variable 'stat_c1' was corrupted - C++
Добрый вечер форумчане. Написал програмку, все отлично, все работает. Но при завершении программы, т.е. когда выполняеться строчка return...

Stack around the variable 'cif' was corrupted - C++
#include &lt;iostream&gt; using namespace std; void main (){ char cif=&quot;1234567891111199121&quot;; int i=0, j=0, dlin=0, razn=0,...

Бинарные файлы и Stack around the variable was corrupted - C++
Добрый день. Делаю программу (лабу), которая работает с бинарными файлами: Сначала заполняет бинарный файл случайным количеством...

Ошибка: Stack around the variable 'Material' was corrupted - C++
При компиляции кода на C++, выводит ----Run-Time Check Failure #2 - Stack around the variable 'Material' was corrupted.---- И...


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

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

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