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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
#1

strcpy подручными средствами - C++

24.10.2012, 17:05. Просмотров 347. Ответов 7
Метки нет (Все метки)

Объясните мне вот эту строчку пожалуйста while(*s1++=*s2++);. Лично я себе это представляю так: сначала у нас буква 'h' копируется в элемент s1, затем и так далее. И в конце концов доходит до символа '\0', который тоже копируется в s1. Как собственно потом происходит выход из цикла-то?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
void strсpy(char *s1, char *s2)
{
    while(*s1++=*s2++);
}
 
int main ()
{
  char str1[]="hellow";
  char str2[40];
  strсpy(str2,str1);
  printf("str1:%s str2:%s\n", str1, str2);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2012, 17:05     strcpy подручными средствами
Посмотрите здесь:

strcpy C++
strcpy/strcpy_s C++
C++ свой strcpy()
strcpy C++
Реализация strcpy(); C++
C++ strdup(), strcpy()
Функция strcpy C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 3
24.10.2012, 17:16     strcpy подручными средствами #2
Цитата Сообщение от aleksand Посмотреть сообщение
Как собственно потом происходит выход из цикла-то?
C++
1
while(*s1++=*s2++);
Результат операции присваивания равен тому, что присваивают s1. Т.е. когда дойдём до символа 0 в строке s2, результат операции присваивания станет == 0 и цикл прекратится.
М.б.чуть понятнее, если записать так:
C++
1
while( (*s1++=*s2++) == 0 );
Добавлено через 1 минуту
Ну и, по большому счёту, это говнокод.
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
24.10.2012, 17:18  [ТС]     strcpy подручными средствами #3
Цитата Сообщение от John Prick Посмотреть сообщение
C++
1
while(*s1++=*s2++);
Результат операции присваивания равен тому, что присваивают s1. Т.е. когда дойдём до символа 0 в строке s2, результат операции присваивания станет == 0 и цикл прекратится.
М.б.чуть понятнее, если записать так:
C++
1
while( (*s1++=*s2++) == 0 );
Добавлено через 1 минуту
Ну и, по большому счёту, это говнокод.
Понимаю что это через жопу, но всё же это помогает лучше понять что и как работает.
castaway
Эксперт С++
4870 / 3009 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
24.10.2012, 17:37     strcpy подручными средствами #4
Может быть:
C
1
while ( (*s1++ = *s2++) != 0 );
?
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
24.10.2012, 18:33     strcpy подручными средствами #5
Цитата Сообщение от John Prick Посмотреть сообщение
Ну и, по большому счёту, это говнокод.
Почему?
John Prick
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 3
24.10.2012, 23:29     strcpy подручными средствами #6
Цитата Сообщение от lazybiz Посмотреть сообщение
Может быть:
C
1
while ( (*s1++ = *s2++) != 0 );
?
Да, вы правы, я ошибся, как обычно. Для меня право/лево, равно/неравно - всегда сложности вызывают

Цитата Сообщение от Kastaneda Посмотреть сообщение
Почему?
Ну потому что не читаемо. Вот и топикстартер не разобрался. Не буду спорить, для библиотечной функции - самое оно, там чем меньше библиотека места занимает, тем лучше. Но ведь библиотечный код никто не читает. А вот код из серии "strcpy подручными средствами" всё-таки читают
Ну это тема для холиварчика, дада.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12535 / 7097 / 797
Регистрация: 27.09.2012
Сообщений: 17,515
Записей в блоге: 2
Завершенные тесты: 1
24.10.2012, 23:58     strcpy подручными средствами #7
Цитата Сообщение от John Prick Посмотреть сообщение
Ну потому что не читаемо.
Разве это плохо читается?
Цитата Сообщение от John Prick Посмотреть сообщение
Но ведь библиотечный код никто не читает.
Ну это Вы так думаете
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2012, 00:23     strcpy подручными средствами
Еще ссылки по теме:

C++ strcpy()
strcpy и VS2012 C++
C++ Strcpy c++ русский язык
C++ Strcpy в vs2012
C++ Strcpy не работает

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
John Prick
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 3
25.10.2012, 00:23     strcpy подручными средствами #8
Холиварчик
Цитата Сообщение от Croessmah Посмотреть сообщение
Разве это плохо читается?
Скажем так, могло бы читаться и лучше. Любой код так или иначе кое-как читается. Прочитав и поняв однажды, кажется, что не так уж и плохо он читаем.
Yandex
Объявления
25.10.2012, 00:23     strcpy подручными средствами
Ответ Создать тему
Опции темы

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