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

Тема в разделе "C/C++/C#", создана пользователем hellomatz, 6 фев 2013.

  1. hellomatz

    hellomatz New Member

    Регистрация:
    31 янв 2013
    Сообщения:
    4
    Симпатии:
    0
    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'.
     
Загрузка...

Поделиться этой страницей