Реализовать Функцию, Которая "тиражирует" Строку На Си (c)

hellomatz

New Member
31.01.2013
4
0
#1
1. Реализуйте функцию со следующим прототипом:

int autoStringMultiply(AutoString *string, unsigned multiplier);

Данная функция "тиражирует" строку, адресуемую string, multiplier раз. В случае
успеха возвращается 0, в противном случае -- -1.



В качестве решения принимается файл с именем solution.c, в котором записываются
решения всех заданий. (Соответствующие фрагменты кода помечаются комментариями,
указывающими, к какому заданию относится конкретный фрагмент.)

Файл main.c содержит директиву #include "solution.c", определение функции main,
типов AutoString и TextFileDrawer, а так же функций их размещения и освобождения
в памяти (и некоторых других полезных вспомогательных функций). Внутри функции
main разрешается поместить код, проверяющий, по мнению студента,
работоспособность реализованных функций.

Студент получает 0 баллов за задание, если компилятор gcc, запущенный с опциями
-std=c99 -pedantic -Wall, в процессе компиляции файла main.c выдает ошибки
(errors), относящиеся к строкам, соответствующим данному заданию. Оценка за
задание снижается на 1 балл, если в процессе компиляции возникают предупреждения
(warnings), относящиеся к строкам, соответствующим данному заданию.

Для получения максимального балла за задание, реализованные функции должны:

* соответствовать своему прототипу;

* верно модифицирует соответствующие структуры данных, переданные по ссылке
в качестве аргументов, в соответствии с заданием;

* выделяет не более и не менее необходимого объема памяти с помощью функции
malloc или аналогов, если это предполагается по заданию;

* использует realloc там, где это более предпочтительно;

* освобождает требуемую память с помощью функции free и только ее, если это
предполагается по заданию;

* эффективно использует функции memcpy, memmove, strstr и т.п. вместо циклов.

* проверяет входные аргументы на допустимость (включая возможность переполнения
в ходе выполнения арифметических операций), где это возможно, и игнорирует
свой вызов в случае некорректных аргументов;

* проверяет значения, возвращаемые вызываемыми функциями, и прекращает работу
в случае ошибки, сохраняя целостность данных;

* в случае успеха возвращает 0, в противном случае -- -1.

* не содержит иных побочных эффектов.

Если хотя бы один из этих пунктов нарушается хотя бы для одного набора входных
значений, оценка снижается как минимум на 1 балл. В случае несоответствия
определения функции прототипу или нарушения каких-либо пунктов для существенного
диапазона аргументов, оценка снижается как минимум на 2 балла.

* Дополнительные требования:

** если значение string->native_string равно NULL, данная строка должна
трактоваться как пустая;

** любое значение string->native_string, не равное NULL, должно быть массивом
символов, размещенным в динамической области памяти (только если оно не
const), последний элемент которого -- терминальный символ '\0'.