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

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

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

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

24.11.2014, 00:15. Просмотров 225. Ответов 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";
Лучшие ответы (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
Run-Time Check Failure #2 - Stack around the variable 'n' was corrupted C++
C++ Stack around the variable 'cif' was corrupted
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
Нарушитель
3129 / 1904 / 285
Регистрация: 27.08.2010
Сообщений: 5,133
Записей в блоге: 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
Нарушитель
3129 / 1904 / 285
Регистрация: 27.08.2010
Сообщений: 5,133
Записей в блоге: 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
Нарушитель
3129 / 1904 / 285
Регистрация: 27.08.2010
Сообщений: 5,133
Записей в блоге: 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 was corrupted масив через указатель
C++ Stack around the variable was corrupted
Stack around the variable 'stat_c1' was corrupted C++
C++ Ошибка: Stack around the variable 'Material' was corrupted
C++ Run-Time Check Failure #2 - Stack around the variable 'dt' was corrupted

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

Или воспользуйтесь поиском по форуму:
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
3365 / 1687 / 448
Регистрация: 18.10.2014
Сообщений: 3,095
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
Ответ Создать тему
Опции темы

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