h1

Собственная реализация функции strcat() (C++)

Июль 9, 2010

Программа была написана при помощи массивов, строк и указателей.

Обращение к функции strcat() имеет следующий формат:

strcat(s1, s2);

Функция strcat() присоединяет строку s2 к концу строки s1, при этом строка s2 не изменяется.

Исходный код:
void mystrcat(char *to, char *from);

int main()
{
char str1[40], str2[20];
cout << «enter string: «;
gets(str2);
gets(str1);

mystrcat(str2, str1);

cout << «string copiet: » << str2;

cin.get();
return 0;
}

void mystrcat(char *to, char *from)
{
while(*to) to++;
while(*from)
{
*to = *from;
to++;
from++; ‘
}

//графическое изображение, при копировании переписать вручную
}

Advertisements

5 комментариев

  1. Извините, но по моему мнению мнению эта фунция совсем неправильная.
    Потому что во-первых при работе с указателями не контролируются выход за границы массива и поэтому если размер str1 и str2 большие 20, то мы выходим за границы массива, а если учесть, что память под статические переменные выделяется по типу LIFO, то таким застольем указателя по памяти Перезаписываем str1, что является существенным ошибкой.
    Во-вторых если мы передадим str2 как параметр в другую функцию, то передастся только первых 20 символов. Что также ошибка, поскольку мы считаем, что ленты объединены.
    Функция std :: cout обманывает нас поскольку она реализована так, что она считает окончанием ленты символ », а не конец массива.


  2. Вместо «завершения строки \ 0 в апострофах» можно написать: *to = *from;
    А то если просто пример скопировать, то картинка не копируется, сразу не замечаешь, а только через четыре часа отладки понимаешь, что не всё скопировал.


    • комментарий «//графическое изображение, при копировании переписать вручную» тоже четыре часа заметить не могли?


  3. Что означает двойная ковычка в выражении *to = »;
    в конце функции mystrcat.


    • Это символ завершения строки \ 0 в апострофах . Хостинг автоматически исправляет его на кавычки. Исправлено.



Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: