Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2011, 19:33   #1
genrix
просто
Форумчанин
 
Аватар для genrix
 
Регистрация: 17.02.2011
Сообщений: 405
Сообщение Стек был испорчен

Дана программа:
Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
	setlocale(LC_ALL,"rus");
	char ima[15];
	char uma[15];
	cout << "Привет, мир!!!"<<endl;
	cout << "Введите 15 символов, они будут скопированы\n"
	"из ima в uma\n";
	cin >> uma;
		for (int a=0; a<15; ++a)
			ima[a] = uma[a];
	cout << uma;
	getch();
}
После того, как я её скомпилировал в Visual Studio 2008 и запустил, программа работала нормально, но когда я нажал ENTER (в это время выполнялась getch() вышла табличка с ошибкой:
Цитата:
Run-Time Check Failure #2 - Stack around the variable 'uma' was corrupted.
Почему это произошло?
Не стоит читать свои переписки двухлетней давности...

Последний раз редактировалось ACE Valery; 30.05.2011 в 21:42.
genrix вне форума Ответить с цитированием
Старый 30.05.2011, 19:50   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

потому что вводить надо 14 символов
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 30.05.2011, 19:50   #3
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Код:
cin >> uma;
Потому что надо так:
Код:
cin.getline(uma, sizeof uma);
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 30.05.2011, 19:56   #4
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

А также писать return 0; в конце мэйна и использовать <Ctrl+F5> для запуска программы, чтобы не писать всех этих левых getch'ей.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 30.05.2011, 20:08   #5
genrix
просто
Форумчанин
 
Аватар для genrix
 
Регистрация: 17.02.2011
Сообщений: 405
По умолчанию

Цитата:
return 0;
Спасибо!!!
Цитата:
cin.getline(uma, sizeof uma);
Не подскажете, как это работает???
Не стоит читать свои переписки двухлетней давности...
genrix вне форума Ответить с цитированием
Старый 30.05.2011, 20:21   #6
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Это метод класса istream, первый параметр - указатель на строку, куда надо записывать, в данном случае им выступает имя массива; второй - размер этой строки, передается, чтобы не записалось за массив, что у вас и происходило, - размер буфера, соответственно, макс. количество записанных символов будет на 1 меньше из-за завершающего '\0'; также может быть еще один аргумент - символ, которым надо завершить ввод. В общем, почитайте тут: http://www.cplusplus.com/reference/i...tream/getline/
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 30.05.2011, 22:13   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
А также писать return 0; в конце мэйна и использовать <Ctrl+F5> для запуска программы, чтобы не писать всех этих левых getch'ей.
уже давно не надо в конце мейна писать return 0
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.05.2011, 00:47   #8
alexsash1981
Новичок
Джуниор
 
Регистрация: 31.05.2011
Сообщений: 1
По умолчанию

Люди подскажите
Реалізувати стек для зберігання і операцій з даними виду:

Ім'я процедури Кількість параметрів Параметри (по 2 байти)

Забезпечити виконання операцій:
• додавання процедури в стек;
• видалення процедури зі стека;
• видалення стека (висвободження місця у пам'яті);
• роздрукування вмісту стека;
• підрахунок розміру пам'яті, зайнятої стеком;
• підрахунок кількості процедур, що знаходиться у стеку.
alexsash1981 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Испорчен файл Vikenty Операционные системы общие вопросы 4 17.07.2010 01:30
Жил был Windows unicode Windows 37 18.05.2009 15:34
Form1 был невидим Михаил Юрьевич Общие вопросы Delphi 3 16.01.2008 00:44