LINUX.ORG.RU

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

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

Почему бы не написать что-нибудь такое?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void strappend(char **str, const char *append)
{
    if (*str == NULL)
    {
        *str = malloc(0);
    }

    size_t strLen = strlen(*str);
    size_t appendLen = strlen(append);
    size_t newLen = strLen + appendLen;

    *str = realloc(*str, newLen + 1);

    memcpy(*str + strLen, append, appendLen);
    (*str)[newLen] = '\0';
}

int main()
{
    char *str = NULL;

    const char *array[] = { "Hello", " ", "World", ", epta", "!" };

    for (int i = 0; i < sizeof(array) / sizeof(*array); i++) {
        strappend(&str, array[i]);
    }

    printf("%s %ld\n", str, strlen(str));

    free(str);
    return 0;
}

strcat - гавно, нужно резервировать под него память, чтобы не было переполнения.

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

Почему бы не написать что-нибудь такое?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void strappend(char **str, const char *append)
{
    if (*str == NULL)
    {
        *str = malloc(0);
    }

    size_t strLen = strlen(*str);
    size_t appendLen = strlen(append);
    size_t newLen = strLen + appendLen;

    *str = realloc(*str, newLen + 1);

    memcpy(*str + strLen, append, appendLen);
    (*str)[newLen] = '\0';
}

int main()
{
    char *str = NULL;

    const char *array[] = { "Hello", " ", "World", ", epta", "!" };

    for (int i = 0; i < sizeof(array) / sizeof(*array); i++) {
        strappend(&str, array[i]);
    }

    printf("%s %ld\n", str, strlen(str));

    free(str);
    return 0;
}

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

Почему бы не написать что-нибудь такое?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void strappend(char **str, const char *append)
{
    if (*str == NULL)
    {
        *str = malloc(0);
    }

    size_t strLen = strlen(*str);
    size_t appendLen = strlen(append);
    size_t newLen = strLen + appendLen;

    *str = realloc(*str, newLen + 1);

    memcpy(*str + strLen, append, appendLen);
    (*str)[newLen] = '\0';
}

int main()
{
    char *str = NULL;

    const char *array[] = { "Hello", " ", "World", ", epta", "!" };

    for (int i = 0; i < sizeof(array) / sizeof(*array); i++) {
        strappend(&str, array[i]);
    }

    printf("%s %ld\n", str, strlen(str));

    free(str);
    return 0;
}