История изменений
Исправление 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. В любом случае, после того, как освоишь и то и другое, ты сможешь квалифицированно выбирать инструмент под задачу.