Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Извращения с копированием строк

27K
18 декабря 2015 года
mnanorn
78 / / 01.12.2013
Всем доброго времени суток!

На днях изучал работу с динамической памятью в стандартном си и не смог удержаться от изврата:
Код:
#include <stdio.h>
#include <stdlib.h>

char* str = "Hello\n\n"
            "This is dynamically memory test programm\n"
            "I create some string and place it\n"
            "into fucking static memory. Then I have\n"
            "copyed it into dynamically area and print.\n\n"
            "Let's do it!\n\n";

int main()
{
    int j;
    char* buf = (char*)calloc(256, 1);

    for(j = 0; str[j] && buf; buf[j] = str[j++]);

    system("cls");
    printf("%s", buf);
    system("pause");

    free(buf);

    return 0;
}
Задача проста: скопировать строку в динамическую область памяти и вывести ее. Изврат в строке №16. Этот кусок кода: 1) копирует строку в буфер; 2) изменяет значение итератора; 3) проверяет, чтобы указатель на буфер не был равен нулю.

Как еще больше можно извратить?
282
18 декабря 2015 года
Bard
481 / / 26.02.2006
Я бы добавил в конец buf[j] = 0x00:
 
Код:
for(j = 0; str[j] && buf; buf[j] = str[j++], buf[j] = 0x00);
т.к. после копирования за строкой в буфере может оказаться не нулевой символ..
27K
18 декабря 2015 года
mnanorn
78 / / 01.12.2013
Цитата: Bard
Я бы добавил в конец buf[j] = 0x00:
 
Код:
for(j = 0; str[j] && buf; buf[j] = str[j++], buf[j] = 0x00);
т.к. после копирования за строкой в буфере может оказаться не нулевой символ..

Не соглашусь, ибо calloc(), а не malloc() :)

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог