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

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

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

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

24.10.2012, 17:05. Просмотров 365. Ответов 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);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2012, 17:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос strcpy подручными средствами (C++):

strcpy - C++
Недавно начал программировать на C++, в типах плохо ещё разбираюсь... не могу понять, что надо исправить, чтобы код: char szSendBuff; ...

strcpy - C++
прога пашет,но после сортировки по результату,он выдает какойто корявый список,тоесть strcpy неверно пашет...... че с ней теперь...

strcpy() - C++
Ребята! Помогите с задачкой! С помощью функции strcpy() заменить в строке три символа, начиная со второго. Для замены вводим короткую...

strcpy и VS2012 - C++
// newintro.cpp // познакомимся с оператором new #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;string.h&gt; using namespace std; ...

Функция strcpy - C++
цель очевидна. почему не работает? :-| #include &lt;iostream&gt; void strcpy(char *from, char *to) { to=from; } int main() { ...

свой strcpy() - C++
кто может написать или показать, или подсказать код к функции либы стринг.н - strcpy() я уже замучался искать правильный вариант, 3...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
24.10.2012, 17:16 #2
Цитата Сообщение от aleksand Посмотреть сообщение
Как собственно потом происходит выход из цикла-то?
C++
1
while(*s1++=*s2++);
Результат операции присваивания равен тому, что присваивают s1. Т.е. когда дойдём до символа 0 в строке s2, результат операции присваивания станет == 0 и цикл прекратится.
М.б.чуть понятнее, если записать так:
C++
1
while( (*s1++=*s2++) == 0 );
Добавлено через 1 минуту
Ну и, по большому счёту, это говнокод.
1
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
24.10.2012, 17:18  [ТС] #3
Цитата Сообщение от John Prick Посмотреть сообщение
C++
1
while(*s1++=*s2++);
Результат операции присваивания равен тому, что присваивают s1. Т.е. когда дойдём до символа 0 в строке s2, результат операции присваивания станет == 0 и цикл прекратится.
М.б.чуть понятнее, если записать так:
C++
1
while( (*s1++=*s2++) == 0 );
Добавлено через 1 минуту
Ну и, по большому счёту, это говнокод.
Понимаю что это через жопу, но всё же это помогает лучше понять что и как работает.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
24.10.2012, 17:37 #4
Может быть:
C
1
while ( (*s1++ = *s2++) != 0 );
?
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
24.10.2012, 18:33 #5
Цитата Сообщение от John Prick Посмотреть сообщение
Ну и, по большому счёту, это говнокод.
Почему?
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
24.10.2012, 23:29 #6
Цитата Сообщение от lazybiz Посмотреть сообщение
Может быть:
C
1
while ( (*s1++ = *s2++) != 0 );
?
Да, вы правы, я ошибся, как обычно. Для меня право/лево, равно/неравно - всегда сложности вызывают

Цитата Сообщение от Kastaneda Посмотреть сообщение
Почему?
Ну потому что не читаемо. Вот и топикстартер не разобрался. Не буду спорить, для библиотечной функции - самое оно, там чем меньше библиотека места занимает, тем лучше. Но ведь библиотечный код никто не читает. А вот код из серии "strcpy подручными средствами" всё-таки читают
Ну это тема для холиварчика, дада.
0
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,381
Записей в блоге: 3
Завершенные тесты: 1
24.10.2012, 23:58 #7
Цитата Сообщение от John Prick Посмотреть сообщение
Ну потому что не читаемо.
Разве это плохо читается?
Цитата Сообщение от John Prick Посмотреть сообщение
Но ведь библиотечный код никто не читает.
Ну это Вы так думаете
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
25.10.2012, 00:23 #8
Холиварчик
Цитата Сообщение от Croessmah Посмотреть сообщение
Разве это плохо читается?
Скажем так, могло бы читаться и лучше. Любой код так или иначе кое-как читается. Прочитав и поняв однажды, кажется, что не так уж и плохо он читаем.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2012, 00:23
Привет! Вот еще темы с ответами:

strcpy/strcpy_s - C++
Добрый вечер! Есть класс (упрощенно): class const_string { public: const_string(char const* s) { strcpy(str, s); /...

Реализация strcpy(); - C++
Какими способами функцию strcpy() библиотеки string можно выразить через указатели?

Strcpy не работает - C++
Привет :) Написал программу, не понимаю почему не работает. Объясните пожалуйста) КОД #include &lt;iostream&gt; #include...

Strcpy в vs2012 - C++
Недавно перешел из devc++ в vs2012, после копирования кода в vs2012, выдает ошибку при использовании ф-ии strcpy (команду для препроцессора...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.10.2012, 00:23
Ответ Создать тему
Опции темы

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