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

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

Восстановить пароль Регистрация
 
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
24.10.2012, 17:05     strcpy подручными средствами #1
Объясните мне вот эту строчку пожалуйста 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 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
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
24.10.2012, 17:37     strcpy подручными средствами #4
Может быть:
C
1
while ( (*s1++ = *s2++) != 0 );
?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
24.10.2012, 18:33     strcpy подручными средствами #5
Цитата Сообщение от John Prick Посмотреть сообщение
Ну и, по большому счёту, это говнокод.
Почему?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
24.10.2012, 23:29     strcpy подручными средствами #6
Цитата Сообщение от lazybiz Посмотреть сообщение
Может быть:
C
1
while ( (*s1++ = *s2++) != 0 );
?
Да, вы правы, я ошибся, как обычно. Для меня право/лево, равно/неравно - всегда сложности вызывают

Цитата Сообщение от Kastaneda Посмотреть сообщение
Почему?
Ну потому что не читаемо. Вот и топикстартер не разобрался. Не буду спорить, для библиотечной функции - самое оно, там чем меньше библиотека места занимает, тем лучше. Но ведь библиотечный код никто не читает. А вот код из серии "strcpy подручными средствами" всё-таки читают
Ну это тема для холиварчика, дада.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 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++ strdup(), strcpy()
Функция strcpy C++
C++ strcpy()

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

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

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