Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Свои strcpy() и strcat() 
V
    Опции темы
Riddik
Дата 13.3.2009, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



strcpy() копирует в первую строку (первый аргумент) вторую строку (второй аргумент).
strcat() добавляет в конец первой строки (первый аргумент), вторую строку (второй аргумент).
 
Приемлимо ли делать так, если надо написать свои аналоги ф-ии:
Код

void mystrcat(char *str1, char *str2)
{
    for(;*str1; str1++);  //устанавливаем указатель на символ завершения строки, т.е. ноль.
    while(*str2)   //копируем посимвольно вторую строку в первую, пока не наткнёмся на символ завершения строки
    {
        *str1=*str2;   
        str1++;
        str2++;
    }
    *str1=*str2; //добавляем 0 

}


и 
Код

void mystrcpy(char *str1, char *str2)
{
    while(*str2)
    {
        *str1=*str2;
        str1++;
        str2++;
    }
    *str1=*str2;

}


Тесты показывают одинаковые результаты как от ф-ий из стандартной библиотеки, так и от этих.
Но возникает несколько непонятных моментов. 
Если в ф-ию mystrcat() первым аргументом передаётся указатель на массив из, скажем, 10 символов, то когда начинается добавление второй строки, то указатель, ссылающийся на этот первый массив, начнёт передвигаться на байт "вперёд" за пределы этого массива, какую память он при этом будет перезаписывать? Нормально ли так вообще делать?

P.S. Может это и не нужно, но условия такие: не использовать new и delete

Это сообщение отредактировал(а) Riddik - 13.3.2009, 00:46
PM MAIL   Вверх
Dmi3ev
Дата 13.3.2009, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

P.S. Может это и не нужно, но условия такие: не использовать new и delete

используй malloc и free  smile 


--------------------

PM MAIL   Вверх
Anikmar
Дата 13.3.2009, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Этот код в корне неправильный:
Код

void mystrcat(char *str1, char *str2)
{
    for(;*str1; str1++);  //устанавливаем указатель на символ завершения строки, т.е. ноль.
    while(*str2)   //копируем посимвольно вторую строку в первую, пока не наткнёмся на символ завершения строки
    {
        *str1=*str2;   
        str1++;
        str2++;
    }
    *str1=*str2; //добавляем 0 
}

Откуда уверенность, что память под str1 выделена в достаточной степени?

А этот можно еще короче:
Код

void mystrcpy(char *str1, char *str2)
{
    while(*str2) *str1++=*str2++;
    *str1=0;
}


Гы.
А оно надо?
PM MAIL ICQ   Вверх
Dmi3ev
Дата 13.3.2009, 03:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41





--------------------

PM MAIL   Вверх
Riddik
Дата 13.3.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Anikmar, ага, я ж про тоже и спрашивалsmile



Dmi3ev,  классная статья - спасибо!!!
PM MAIL   Вверх
Remiznik
Дата 13.3.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: 1
Всего: 1



Dmi3ev,  класная статья ! только мне интересно как это реализовано в STL можно гденибуть исходники этих функций глянуть ? 
PM MAIL   Вверх
Anikmar
Дата 13.3.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата

Remiznik 
Dmi3ev,  класная статья ! только мне интересно как это реализовано в STL можно гденибуть исходники этих функций глянуть ?  


Заголовочный файл STL - это собственно и есть исходник. На то это и шаблоны. Открывайте и смотрите.


PM MAIL ICQ   Вверх
Rififi
Дата 13.3.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 3
Всего: 36



http://local.joelonsoftware.com/wiki/%D0%9...%B2%D0%B0%D0%BC 
Почему, читая эту статью, меня не покидало ощущение что читать её должна моя бабушка?
...
В оригинале статья называлась Back to Basics и была написана 11 декабря 2001 года 
Вот почему smile 

Это сообщение отредактировал(а) Rififi - 13.3.2009, 12:08
PM MAIL   Вверх
Remiznik
Дата 13.3.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: 1
Всего: 1



запустил под отладчиком функция strcpy() вызвала фаел strcat.asm .... и там работала асемблеровскими командами !
значит STL написан на асм ?
PM MAIL   Вверх
Dmi3ev
Дата 13.3.2009, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

http://local.joelonsoftware.com/wiki/%D0%9...%B2%D0%B0%D0%BC 
Почему, читая эту статью, меня не покидало ощущение что читать её должна моя бабушка?
...
В оригинале статья называлась Back to Basics и была написана 11 декабря 2001 года 
Вот почему

ну извини  smile 
 smile 
Крутая у тебя бабушка, раз такие статьи читает, завидую...


--------------------

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.