Конкатенация 2 строк и новый указатель возвращены - PullRequest
1 голос
/ 11 июля 2011

Я не уверен, спал я или нет, потому что я не могу найти эту функцию, где бы я ни смотрел.Функция вызывает конкатенацию двух строк, а затем возвращает указатель на вновь выделенный блок памяти с двумя объединенными строками.

Кто-нибудь знает о такой функции?

Ответы [ 4 ]

3 голосов
/ 11 июля 2011

Я не знаю ничего подобного в стандарте C;POSIX C содержит strdup, который возвращает вновь выделенную копию предоставленной строки, но это не то, о чем вы просите.

Тем не менее, вы можете легко создать ее самостоятельно:

char * strcat_alloc(const char * first, const char * second)
{
    size_t s1=strlen(first), s2=strlen(second), stot=s1+s2+1;
    // Length overflow check (see @R.. comment)
    if(stot<s2+1)
        return NULL;
    char * ret = malloc(stot);
    if(ret==NULL)
        return NULL;
    strcpy(ret,first);
    strcpy(ret+s1, second);
    return ret;
}
1 голос
/ 11 июля 2011

Не могли бы вы подумать о функции GLib g_strconcat()? Это не совсем одно и то же: он принимает список строк, определенный NULL, а не просто две строки.

Не существует стандартной функции, которая объединяет строки во вновь выделенную строку в libc.

0 голосов
/ 11 июля 2011

Я не знаю о готовой, но как насчет этой слегка протестированной реализации:

char* strdup_cat( char const* s1, char const* s2)
{
    size_t siz1 = strlen(s1);
    size_t siz2 = strlen(s2);

    char* result = (char*) malloc(siz1 + siz2 + 1);

    if (result) {
        memcpy( result, s1, siz1);
        memcpy( result + siz1, s2, siz2 + 1);
    }

    return result;
}
0 голосов
/ 11 июля 2011

Проверьте этот вопрос: Использование strcat в C

Также, glib предоставляет множество функций для обработки строк, если вы можете позволить себе дополнительную зависимость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...