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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2011, 01:04   #1
Space Monkey
 
Регистрация: 24.10.2011
Сообщений: 3
По умолчанию Проблема с массивом строк

Здравствуйте, уважаемые. Помогите мне, пожалуйста, с C++.
Суть: имеются две функции, в первой мы вводим строку, во второй выводим то, что ввели в первой (это обязательное условие). Затем в main нужно сохранить введенную строку в массив, а затем вывести все введенные ранее строки.

Функция ввода:

Код:
char* input_char (char str[]);
char* input_char (char str[])
{
	
	cout << endl << "Введите строку..." << endl;
	cin >> str; 
	return str;
}
Функция вывода:

Код:
char* output_char (char str[]);
char* output_char (char str[])
{
	
	cout << endl << "Вы ввели строку..." << endl;
	cout << str << endl;
	return str;
}
Функция main:

Код:
int main (void)
{
setlocale (0, "");
char str[15]; //массив под вводимую строку
char* pstr[30]; //массив указателей на строки для конечного вывода
int j = 0;   //рабочая лошадка для строк
int schar = 0; //счетчик строк

...

do
{

pstr[j] = output_char(input_char(str));
schar++;
cout << endl <<" pstr[" << j << "] =   " << pstr[j] << endl;
if (j>0)			//это для проверки предыдущей строки
cout << "pstr[" << j-1 << "] =  " << pstr[j-1] << endl; 
	j++;

}
while (...);

...
В конце программы я все строки вывожу в цикле for, но не в этом суть. Суть в том, что когда я ввожу первую строку, мне пишут, например:
Цитата:
pstr[0] = Первая строка
Когда же я ввожу вторую строку, мне пишут:
Цитата:
pstr[1] = Вторая строка
pstr[0] = Вторая строка
Хотя по моему замыслу должно выводить:
Цитата:
pstr[1] = Вторая строка
pstr[0] = Первая строка
Я никак не могу понять, в чем причина подобного поведения, и как нужно правильно написать. Помогите, пожалуйста. Я еще новичок в C++, так что, если возможно, объясните попроще
Space Monkey вне форума Ответить с цитированием
Старый 24.10.2011, 06:24   #2
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Указатели указывают на одну и ту же строку, по этому и выводится одна и та же строка.
An1ka вне форума Ответить с цитированием
Старый 24.10.2011, 10:53   #3
Space Monkey
 
Регистрация: 24.10.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от An1ka Посмотреть сообщение
Указатели указывают на одну и ту же строку, по этому и выводится одна и та же строка.
Вот я и не могу понять, почему на одну и ту же строку-то указывают? По идее, у нас массив указателей и, когда цикл выполняется первый раз то в pstr[0] заносится адрес начала первой строки, потом j увеличивается на 1, и при втором выполнении цикла в pstr[1] заносится адрес начала второй строки. Я не понимаю, почему pstr[0]-то тоже меняется. Я понимаю, что мой вопрос, наверно, кажется глупым, и что я спрашиваю, наверно, очевидные для всех вещи, но я только начинаю изучение и очень хочу разобраться.

Последний раз редактировалось Space Monkey; 24.10.2011 в 11:00.
Space Monkey вне форума Ответить с цитированием
Старый 24.10.2011, 11:39   #4
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

В первый раз заносится адрес строки, во второй раз заносится адрес той же самой строки !
Код:
char str[15]; //массив под вводимую строку
Это одна строка ! Откуда взяться другой строке ?
An1ka вне форума Ответить с цитированием
Старый 24.10.2011, 13:50   #5
Space Monkey
 
Регистрация: 24.10.2011
Сообщений: 3
По умолчанию

Так-то да. Глупая ошибка. Спасибо.

Тогда возникает такой вопрос: "Как мне в память, на которую указывает pstr[j], записать строку, содержащуюся в str? Не установить указатель pstr[j] на начало str, а именно записать значение."
Space Monkey вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивом строк в С KODING_ON_C_MYLOVE Общие вопросы C/C++ 2 21.10.2011 02:11
Проблема с массивом строк Kveigs Общие вопросы C/C++ 2 18.07.2011 20:19
Проблема с массивом @Ivan Общие вопросы C/C++ 2 11.10.2010 11:46
файл с массивом строк, помогите найти ошибку LyaLyaLya Паскаль, Turbo Pascal, PascalABC.NET 7 26.12.2008 23:44
C++.Работа с массивом строк. Очень срочно=( NamelessEndless Помощь студентам 1 29.05.2008 20:08