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

Функция strcpy () - строка должна быть пустой? - C++

Восстановить пароль Регистрация
 
RocBoy-D
32 / 31 / 6
Регистрация: 10.03.2012
Сообщений: 361
17.11.2012, 23:03     Функция strcpy () - строка должна быть пустой? #1
Здравствуйте! Возник вопрос: пусть имеются две непустые строки s1 и s2. Правильно ли копировать содержимое строки s2 в строку s1? Или строка s1 должна быть пустой? Проверил, вроде работает и так и так.
C++
1
2
3
4
5
6
7
8
char *str1 = new char [25], *str2 = new char [50];
    
    cin.getline (str1, 25);
    cin.getline (str2, 50);
    delete [] str1;
    str1 = new char [strlen (str2) + 1];
    strcpy (str1, str2);
    cout << str2;
или
C++
1
2
3
4
5
6
7
char *str1 = new char [25], *str2 = new char [50];
    
    cin.getline (str1, 25);
    cin.getline (str2, 50);
    
    strcpy (str1, str2);
    cout << str2;
Добавлено через 9 минут
В последних строчках не str2, a str1
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
17.11.2012, 23:10     Функция strcpy () - строка должна быть пустой? #2
Копируй на здоровье,
А уж пустая str1 или полная, это компилятору безразлично; ему безразлично также, если str2 будет больше str1

C++
1
2
3
char str1 []= "qqq"; 
char str2 []= "eeeee";  
strcpy (str1, str2);
копирование всё равно произойдёт, но программа отработает некорректно. За подробным надо следить вручную, компилятор такого не остлеживает.

И да, скопируется 6 символов, если чё.
RocBoy-D
32 / 31 / 6
Регистрация: 10.03.2012
Сообщений: 361
17.11.2012, 23:16  [ТС]     Функция strcpy () - строка должна быть пустой? #3
kravam, то есть лучше все-таки освобождать память?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
18.11.2012, 02:40     Функция strcpy () - строка должна быть пустой? #4
В смысле освобождать память?
str2 скопируется в str1, какую память ты хочешь освобождать и главное, зачем?

Тебе нужно, чтобы на месте str1 было содержание str2. Если ты думаешь что для того, чтобы в какую-то ячейку памяти записать содержание, нужно эту ячейку обнулить, ты ошибаешься. Или я не понимаю, о чём речь
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
18.11.2012, 04:00     Функция strcpy () - строка должна быть пустой? #5
RocBoy-D, говоря по-простому, оно возьмет "большое" и запихнет в "маленькое". Оно умеет запихивать, и не проверяет что для этого нужно. Не хочешь париться - юзай std::string.
Yandex
Объявления
18.11.2012, 04:00     Функция strcpy () - строка должна быть пустой?
Ответ Создать тему
Опции темы

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