![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 29.03.2008
Сообщений: 51
|
![]()
Здравствуйте, уважаемые!
Осваиваю C. Написал программу, использующую ф-ю strcat(), но не библиотечную, а мою собственную. Возник вопрос следующего содержания... В таком варианте работа ф-и неверна: Код:
Код:
В таком - работа ф-и верна: Код:
|
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]()
*s++ - разыменовывает s, затем увеличивает указатель s на один
то есть сначала он находит '\0', а затем тут же увеличивает указатель на 1 то есть после цикла Код:
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 29.03.2008
Сообщений: 51
|
![]()
Точно.
![]() То есть в первом while при достижении конца строки, из конструкции (*s++) для сравнения c '\0' берется еще не увеличенный на 1 указатель s, потом он разыменовывается *s для получения самого значения, оно сравнивается с '\0', в результате чего тело цикла первого while (пусть и пустое) не выполняется и следующей итерации не будет, но при этом указатель все равно сдвигается на 1 вследствие внутреннего инкремента в условии. Но этого не происходит, когда увеличение указателя выделено отдельно в тело цикла, как во втором while. Все так, я ничего не упустил? Спасибо, netrino! PS: н-да, надо осторожнее с инкрементами/декрементами в условиях, не первый раз уже на одни и те же грабли встаю...( |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 29.03.2008
Сообщений: 51
|
![]()
Кстати, а в случае
Код:
|
![]() |
![]() |
![]() |
#5 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]()
Всё верно
![]() Цитата:
Кстати, в принципе это можно было бы записать короче: Код:
Последний раз редактировалось netrino; 12.02.2010 в 00:22. |
|
![]() |
![]() |
![]() |
#6 | ||
Пользователь
Регистрация: 29.03.2008
Сообщений: 51
|
![]() Цитата:
Ну а так - да, действительно, они же локальные копии, после выхода - уничтожаются и уже не важно, куда они указывали в конце работы этой функции. Именно так, кстати, рекомендуют писать Ритчи с Керниганом. Цитата:
![]() |
||
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Моя музыка | Манжосов Денис :) | Свободное общение | 0 | 08.11.2009 19:35 |
strcat | larry | Win Api | 3 | 20.07.2009 12:44 |
не работает strcat(),strcpy() | MeGaTpoH | Общие вопросы C/C++ | 5 | 25.01.2009 17:31 |
Моя прога | RealSHELS | Софт | 12 | 16.07.2008 23:59 |
Моя библиотека | mochaliviy | Свободное общение | 3 | 11.01.2008 13:23 |