Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Строка  (Прочитано 14024 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
Maray
Интересующийся

ru
Offline Offline
Пол: Женский

« : 16-12-2015 16:26 » new

Добрый день!

Помогите, пожалуйста.

В моей программе используются переменные char* Я их присваивала в самом начале. Теперь решила сделать так, чтобы они вводились пользователем. Но теперь выводит ошибку: The variable 'in' is being used without being initialized.

Подскажите, как это исправить?
Код:
char* ou;
char* in;
char* mode;



cout << "Введите адрес входного файла: ";
cin >> in;
cout << endl;

cout << "Введите адрес выходного файла: ";
cin >> ou;
cout << endl;

cout << "Введите режим работы(encode или decode): ";
cin >> mode;
cout << endl;
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 16-12-2015 17:03 » 

Если не хочеш ловить блох. Используй string.
Исли использование нуль-терминальной строки принципиально, тогда
Код: (C++)
const int lenghtOU = 256;
char *ou = new char[lenghtOU];
cout << "Введите адрес выходного файла: ";
cin >> ou;
cout << endl;
И в конце, когда уже не нужно будет
Код: (C++)
delete [] ou;
« Последнее редактирование: 16-12-2015 17:06 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 16-12-2015 21:25 » 

Finch, если так подходить, можно и на стеке объявить: 256 байт - пустяк. Вот только если строка будет длиннее 256 - диапазон возможного поведения будет от немного испорченной памяти до ошибки сегментации Улыбаюсь
Кроме того, по-моему, будет, всё-таки,
Код: (C++)
cin.get(ou, lenghtOU);
- тогда всё ок с памятью.

Maray, первым делом, стоит для себя разобраться, что за тип такой char* - всё равно в C++ общение с указателями практически неизбежно.
Далее, как указал Finch, лучше не смешивать два подхода - STL (частью которого являются потоки ввода-вывода, с которыми ты пытаешься работать) и работу с "сырыми" строками, более подходящую при работе с C Runtime Library. Это два сильно разных мира, и лучше бы не смешивать их без необходимости.
Есть специальная функция getline, которая читает из потока в переменную типа std::string.
« Последнее редактирование: 16-12-2015 21:31 от Вад » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 17-12-2015 09:46 » 

Парни, вы о чём?

Всё ж уже исправлено.

The variable 'in' is being used without being initialized.

Всё предельно ясно.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 17-12-2015 16:59 » 

Джон, Это ты к чему?

Вад, ну я же предупредил, что будут блохи.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 18-12-2015 09:23 » 

Вить, ну как же
Цитата
Но теперь выводит ошибку: The variable 'in' is being used without being initialized.

Подскажите, как это исправить?

Она же сама подсказку написала -> "переменная in используется без инициаллизации". Это и есть проблема.

Ответ очевиден - инициаллизировать переменную in. (След. шагом было бы тоже самое с out etc.)

Вопрос ведь не стоял: КАК это сделать.

Так вы о чём?
« Последнее редактирование: 18-12-2015 09:25 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 18-12-2015 11:50 » 

Джон, ну, есть два пути исправления ошибки: индусский и второй. Я лично за второй: понять, что делаешь не так, и как делать правильно.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines