История изменений
Исправление 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;
}