Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

помогите

-

Вопросы и ответы, обсуждения

- Ваши вопросы по C/C++ только в данном разделе

Ответ
 
Опции темы
Старый 09.10.2013, 12:05   #1
Заблокирован
 Сержант
Аватар для ™PO.100.B™
 
™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(
Регистрация: 24.07.2011
Сообщений: 153
Популярность: 15622
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 4,294,967,295
Поблагодарили 521 раз(а) в 159 сообщениях
Отправить сообщение для ™PO.100.B™ с помощью Skype™
 
По умолчанию помогите

1. Посмотрите на main(). Там вызываются различные функции. От вас требуется реализовать str_cpy() и str_cat(). Функции str_printf() и str_free() реализовывать не надо.
2. Прочтите внимательно main(), чтобы понять прототип и использование str_cpy() и str_cat().
3. Код, написанный вами, должен соответствовать по качеству библиотечному коду, как в хорошей реализации libc.
4. Обратите внимание на 4 заголовочных файла перед функцией main. Вы можете использовать функции, описанные в этих файлах, в своей реализации str_cpy() и str_cat()
5. Замечание: эффективная реализация функций str_cpy и str_cat умещается в 7 строк кода на функцию.
Код:
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
 
int main(int argc, char *argv[])
{
    char *s = NULL;
    str_cpy(&s, "Hola Hola");
    str_cpy(&s, s+5);
    str_cat(&s, " World");
    str_printf(&s, "%s!", s);
    puts(s); /* result: "Hola World!" */
    str_free(&s);
    return 0;
}

Последний раз редактировалось ™PO.100.B™; 09.10.2013 в 12:14.
  Ответить с цитированием
Старый 10.10.2013, 08:43   #2
 Пехотинец
Аватар для twice
 
twice на правильном путиtwice на правильном пути
Регистрация: 07.07.2012
Сообщений: 60
Популярность: 171
Сказал(а) спасибо: 3
Поблагодарили 11 раз(а) в 10 сообщениях
 
По умолчанию Re: помогите

Собственно, тебе нужно контролировать выделение/освобождение памяти внутри твоих функций (ибо изначально передается указатель на NULL).

У меня к тебе вопрос: зачем во все функции с префиксом str_ передается char **, когда было б достаточно char * ?
  Ответить с цитированием
Старый 10.10.2013, 17:38   #3
Заблокирован
 Сержант
Аватар для ™PO.100.B™
 
™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(™PO.100.B™ сломал счётчик популярности :(
Регистрация: 24.07.2011
Сообщений: 153
Популярность: 15622
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 4,294,967,295
Поблагодарили 521 раз(а) в 159 сообщениях
Отправить сообщение для ™PO.100.B™ с помощью Skype™
 
По умолчанию Re: помогите

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

void str_cpy(char **s, const char *word) {
    size_t size = sizeof(char) * strlen(word) + 1;
    if ((*s = malloc(size)) != NULL)
    {
        memcpy(*s, word, size);

    }

}

void str_cat(char **s, const char *word) {
    if (*s == NULL) {
        return;
    }
    size_t old_size = sizeof(char) * strlen(*s);
    size_t size = sizeof(char) * strlen(word) + 1;
    if ((*s = realloc(*s, old_size + size)) != NULL);
    {
        memcpy(*s + old_size, word, size);


    }
}

void str_printf(char **s, const char *format, const char *word) 
{
    sprintf(*s, format, word);
}

void str_free(char **s) {
    free(*s);
    *s = NULL;
}

int main(int argc, char *argv[])
{
    char *s = NULL;
    str_cpy(&s, "Hola Hola");
    str_cpy(&s, s+5);
    str_cat(&s, " World");
    str_printf(&s, "%s!", s);
    puts(s); /* result: "Hola World!" */
    str_free(&s);

    //char hello[] = "hello"; char *hello_ptr = hello;
    //str_cat(&hello_ptr, " World"); /* oops =C */
    return 0;
}
нужно оптимизировать посильнее
  Ответить с цитированием
Старый 11.10.2013, 15:57   #4
 Разведчик
Аватар для Клевакин Артем
 
Клевакин Артем скоро будет известенКлевакин Артем скоро будет известенКлевакин Артем скоро будет известенКлевакин Артем скоро будет известен
Регистрация: 19.06.2013
Сообщений: 12
Популярность: 340
Сказал(а) спасибо: 2
Поблагодарили 8 раз(а) в 3 сообщениях
Отправить сообщение для Клевакин Артем с помощью Skype™
 
По умолчанию Re: помогите

Изображения
Тип файла: jpg M3pJAq62IMQ.jpg (88.2 Кб, 61 просмотров)
  Ответить с цитированием
Старый 14.10.2013, 08:45   #5
 Пехотинец
Аватар для twice
 
twice на правильном путиtwice на правильном пути
Регистрация: 07.07.2012
Сообщений: 60
Популярность: 171
Сказал(а) спасибо: 3
Поблагодарили 11 раз(а) в 10 сообщениях
 
По умолчанию Re: помогите

Цитата:
Сообщение от ™PO.100.B™Посмотреть сообщение
size_t old_size = sizeof(char) * strlen(*s);

Умножение не имеет смысла. sizeof(char) на всех платформах равно 1 байту.

Цитата:
Сообщение от ™PO.100.B™Посмотреть сообщение
size_t old_size = sizeof(char) * strlen(*s);

А как же +1 на завершающий нуль-символ?

В функции str_cpy должна быть проверка указателя *s на NULL. Если не равно NULL, тогда сначала надо освободить память, а уж потом выделять новую. Иначе будет утечка памяти.
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Помогите плиз винде переустановил такая шняга стала в пб! помогите что делать? -=|GameOver|=- Общение и обсуждение, архив Point Blank 15 09.08.2012 00:19
[Помогите!] Помогите плиз винде переустановил такая шняга стала в пб! помогите что делать? -=|GameOver|=- Общение и обсуждение, архив Point Blank 1 08.12.2011 07:11

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 21:07.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net