LINUX.ORG.RU

История изменений

Исправление hobbit, (текущая версия) :

Осваиваю си. Всё шло хорошо пока внезапно не понадобилось склеить строки (константные и переменные). Покурил stackoverflow.

Сдаётся мне, тебе надо всё же сначала K&R покурить. К strcat там явная отсылка.

Может есть какая-нибудь общепринятая либа, которая считает длину, выделяет память и склеивает?

Нет. Это Си. Например, первый попавшийся кусок из линуксового ядра:

        char name[MAX_CGROUP_TYPE_NAMELEN + MAX_CFTYPE_NAME + 2] = { 0 };
        if (subsys && !test_bit(ROOT_NOPREFIX, &cgrp->root->flags)) {
                strcpy(name, subsys->name);
                strcat(name, ".");
        }
        strcat(name, cft->name);

(это файл kernel/cgroup.c, если что)

Си - это высокоуровневый ассемблер, и наркоманский синтаксис работы со строками - это плата за эффективность. Когда ты пишешь плюсик в C++ или паскале, тебе генерируется куча кода, а в Си ты этот код сам контролируешь.

Да, ты можешь использовать GLib, как тут советовали, но по сути, это псевдо-ООП. И тут встаёт вопрос, а что лучше - извращаться в процедурном языке с костылями или всё-таки смотреть в сторону C++ и STL? Это на самом деле серьёзный вопрос, и однозначного ответа на него нет. Собственно, срач GTK vs Qt растёт именно отсюда.

Лично я считаю, что когда пишешь _прикладные_ программы - лучше C++, чем его имитация. А если хочешь писать на настоящем Си (то же линуксовое ядро) - то именно strcat.

Я бы тебе посоветовал пописать на Си без костылей (с malloc, strcat и др.), а потом, не отвлекаясь на костыли - на C++ и STL. В любом случае, после того, как освоишь и то и другое, ты сможешь квалифицированно выбирать инструмент под задачу.

Исправление hobbit, :

Осваиваю си. Всё шло хорошо пока внезапно не понадобилось склеить строки (константные и переменные). Покурил stackoverflow.

Сдаётся мне, тебе надо всё же сначала K&R покурить. К strcat там явная отсылка.

Может есть какая-нибудь общепринятая либа, которая считает длину, выделяет память и склеивает?

Нет. Это Си. Например, первый попавшийся кусок из линуксового ядра:

        char name[MAX_CGROUP_TYPE_NAMELEN + MAX_CFTYPE_NAME + 2] = { 0 };
        if (subsys && !test_bit(ROOT_NOPREFIX, &cgrp->root->flags)) {
                strcpy(name, subsys->name);
                strcat(name, ".");
        }
        strcat(name, cft->name);

(это файл kernel/cgroup.c, если что)

Си - это высокоуровневый ассемблер, и наркоманский синтаксис работы со строками - это плата за эффективность. Когда ты пишешь плюсик в C++ или паскале, тебе генерируется куча кода, а в Си ты этот код сам контролируешь.

Да, ты можешь использовать GLib, как тут советовали, но по сути, это псевдо-ООП. И тут встаёт вопрос, а что лучше - извращаться в процедурном языке с костылями или всё-таки смотреть в сторону плюсов и STL? Это на самом деле серьёзный вопрос, и однозначного ответа на него нет. Собственно, срач GTK vs Qt растёт именно отсюда.

Лично я считаю, что когда пишешь _прикладные_ программы - лучше плюсы, чем их имитация. А если хочешь писать на настоящем Си (то же линуксовое ядро) - то именно strcat.

Я бы тебе посоветовал пописать на Си без костылей (с malloc, strcat и др.), а потом, не отвлекаясь на костыли - на плюсах и STL. В любом случае, после того, как освоишь и то и другое, ты сможешь квалифицированно выбирать инструмент под задачу.

Исправление hobbit, :

Осваиваю си. Всё шло хорошо пока внезапно не понадобилось склеить строки (константные и переменные). Покурил stackoverflow.

Сдаётся мне, тебе надо всё же сначала K&R покурить. К strcat там явная отсылка.

Может есть какая-нибудь общепринятая либа, которая считает длину, выделяет память и склеивает?

Нет. Это Си. Например, первый попавшийся кусок из линуксового ядра:

        char name[MAX_CGROUP_TYPE_NAMELEN + MAX_CFTYPE_NAME + 2] = { 0 };
        if (subsys && !test_bit(ROOT_NOPREFIX, &cgrp->root->flags)) {
                strcpy(name, subsys->name);
                strcat(name, ".");
        }
        strcat(name, cft->name);

(это файл kernel/cgroup.c, если что)

Си - это высокоуровневый ассемблер, и наркоманский синтаксис работы со строками - это плата за эффективность. Когда ты пишешь плюсик в C++ или паскале, тебе генерируется куча кода, а в Си ты этот код сам контролируешь.

Да, ты можешь использовать GLib, как тут советовали, но по сути, это псевдо-ООП. И тут встаёт вопрос, а что лучше - извращаться в процедурном языке с костылями или всё-таки смотреть в сторону плюсов и STL? Это на самом деле серьёзный вопрос, и однозначного ответа на него нет. Собственно, срач GTK vs Qt растёт именно отсюда.

Лично я считаю, что когда пишешь _прикладные_ программы - лучше плюсы, чем их имитация. А если хочешь писать на настоящем Си (то же линуксовое ядро) - то именно strcat.

Я бы тебе посоветовал пописать на Си без костылей (с malloc, strcat и др.), а потом, не отвлекаясь на костыли - на плюсах и STL. В любом случае, после того, как освоишь и то и другое, ты сможешь квалифицированно выбирать инструмент под задачу.

Исходная версия hobbit, :

Осваиваю си. Всё шло хорошо пока внезапно не понадобилось склеить строки (константные и переменные). Покурил stackoverflow.

Сдаётся мне, тебе надо всё же сначала [url=]http://www.lib.ru/CTOTOR/kernigan.txt_with-big-pictures.html]K&R покурить. К strcat там явная отсылка.

Может есть какая-нибудь общепринятая либа, которая считает длину, выделяет память и склеивает?

Нет. Это Си. Например, первый попавшийся кусок из линуксового ядра:

        char name[MAX_CGROUP_TYPE_NAMELEN + MAX_CFTYPE_NAME + 2] = { 0 };
        if (subsys && !test_bit(ROOT_NOPREFIX, &cgrp->root->flags)) {
                strcpy(name, subsys->name);
                strcat(name, ".");
        }
        strcat(name, cft->name);

(это файл kernel/cgroup.c, если что)

Си - это высокоуровневый ассемблер, и наркоманский синтаксис работы со строками - это плата за эффективность. Когда ты пишешь плюсик в C++ или паскале, тебе генерируется куча кода, а в Си ты этот код сам контролируешь.

Да, ты можешь использовать GLib, как тут советовали, но по сути, это псевдо-ООП. И тут встаёт вопрос, а что лучше - извращаться в процедурном языке с костылями или всё-таки смотреть в сторону плюсов и STL? Это на самом деле серьёзный вопрос, и однозначного ответа на него нет. Собственно, срач GTK vs Qt растёт именно отсюда.

Лично я считаю, что когда пишешь _прикладные_ программы - лучше плюсы, чем их имитация. А если хочешь писать на настоящем Си (то же линуксовое ядро) - то именно strcat.

Я бы тебе посоветовал пописать на Си без костылей (с malloc, strcat и др.), а потом, не отвлекаясь на костыли - на плюсах и STL. В любом случае, после того, как освоишь и то и другое, ты сможешь квалифицированно выбирать инструмент под задачу.