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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2011, 21:40   #1
kypck
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 35
По умолчанию Непонятка с char*

Код:
#include <iostream>
using namespace std;
int main()
{
 	char*lol = new char[130];
 	char*lol1 = new char [130];
 	char*lol2 = new char[130];
 	
 	cin >> lol;
 	lol1=lol;
 	lol2=lol;
 	cout << "lol1 = "<< lol1 << "\n" << "lol2 = " << lol2 <<"\n";
 	

//FLAG

 	cin >> lol;
 	lol1 = lol;
 	cout << "lol1 = "<< lol1 << "\n" << "lol2 = " << lol2<<"\n";
 	
 	return 0;
}
Проблема в том, что при втором вводе lol (FLAG), lol2 в выводе тоже меняется.

Например, если я сначала введу Igor, То программа правильно отобразит:

lol1=Igor
lol2=Igor

Во втором вводе ввожу Vasya
Выводит:

lol1=Vasya
lol2=Vasya.

Хотя lol2 нигде не менялось, поясните дураку в чем ошибка х(

Заменил строку
Код:
.............
lol2=lol;
на
Код:
strcpy(lol2,lol);
Все работает как надо. В чем все же ошибка?

Последний раз редактировалось kypck; 30.10.2011 в 21:49.
kypck вне форума Ответить с цитированием
Старый 30.10.2011, 22:05   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

В том, что lol, lol1, lol2 - это адреса, указатели на начала массивов.
lol1=lol - "записать в lol1 то, что записано в lol", а записан там адрес массива, выделенного lol оператором new. При этом, блок памяти, выделенный при инициализации lol1, "потерялся" - в программе не осталось переменных, в которых хранился бы его адрес; этот эффект называется "утечкой памяти" (memory leak) и его надо всеми силами избегать. А lol и lol1 теперь указывают на начало одного и того же блока, являясь, фактически, синонимами: lol[56]='a' эквивалентно lol1[56]='a', эти действия производят одинаковые изменения в памяти программы.
str(n)cpy - функция копирования, она переносит именно содержимое одного массива в другой.

Это достаточно важный момент, советую разобраться.
Что выведет на экран следующий код и почему?
Код:
int *pointer1, *pointer2;
int a=2, b=3;
std::cout << a << " " << b << std::endl;
pointer1=pointer2=&a;
(*pointer1)++;
(*pointer2)++;
a++; b--;
std::cout << a << " " << b << std::endl;
b=a;
pointer2=&b;
b=(*pointer1);
(*pointer1)++;
(*pointer2)++;
a++; b--;
std::cout << a << " " << b << std::endl;

Последний раз редактировалось Abstraction; 30.10.2011 в 22:34. Причина: Ошибка в объявлении
Abstraction вне форума Ответить с цитированием
Старый 30.10.2011, 22:20   #3
kypck
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение

Код:
int* pointer1, pointer2;
int a=2, b=3;
std::cout << a << " " << b << std::endl;
pointer1=pointer2=&a;
(*pointer1)++;
(*pointer2)++;
a++; b--;
std::cout << a << " " << b << std::endl;
b=a;
pointer2=&b;
b=(*pointer1);
(*pointer1)++;
(*pointer2)++;
a++; b--;
std::cout << a << " " << b << std::endl;


а в 1 строке разве не нужно int *pointer1, *pointer2?

Код посмотрел, ничего нового не узнал х)

За объяснение с чарами спасибо. Все стало на свои места

Последний раз редактировалось kypck; 30.10.2011 в 22:24.
kypck вне форума Ответить с цитированием
Старый 30.10.2011, 22:34   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

kypck, я растяпа. Спасибо, исправил.
Abstraction вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
'unsigned char [512]' в 'const char *' frommars Visual C++ 8 02.07.2011 13:37
Проблема с программой. Нельзя преобразовать тип set of char к char Lasso Помощь студентам 5 07.06.2011 12:03
преобразование типов char-const char student101 Помощь студентам 8 01.12.2010 20:45
Ошибка cannot convert from 'char *' to 'char [100]' Stellvertreter Общие вопросы C/C++ 5 30.05.2010 00:02
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql Muahahaha PHP 8 27.03.2008 11:17