Terminate String memory with '\0'
This commit is contained in:
parent
49e4e853be
commit
c6f5200e69
37
src/String.c
37
src/String.c
@ -5,16 +5,10 @@ String * String_new(const char * s)
|
||||
{
|
||||
String * new_st = (String *)malloc(sizeof(String));
|
||||
size_t size = strlen(s);
|
||||
if (size != 0u)
|
||||
{
|
||||
char * smem = (char *)malloc(size);
|
||||
memcpy(smem, s, size);
|
||||
new_st->value = smem;
|
||||
}
|
||||
else
|
||||
{
|
||||
new_st->value = NULL;
|
||||
}
|
||||
char * smem = (char *)malloc(size + 1u);
|
||||
memcpy(smem, s, size);
|
||||
smem[size] = '\0';
|
||||
new_st->value = smem;
|
||||
new_st->size = size;
|
||||
return new_st;
|
||||
}
|
||||
@ -25,9 +19,10 @@ String * String_plus(const String * st, const char * s)
|
||||
size_t size1 = st->size;
|
||||
size_t size2 = strlen(s);
|
||||
size_t size = size1 + size2;
|
||||
char * smem = (char *)malloc(size);
|
||||
char * smem = (char *)malloc(size + 1u);
|
||||
memcpy(smem, st->value, size1);
|
||||
memcpy(&smem[size1], s, size2);
|
||||
smem[size] = '\0';
|
||||
new_st->value = smem;
|
||||
new_st->size = size;
|
||||
return new_st;
|
||||
@ -37,17 +32,10 @@ String * String_concat(String * st, const char * s)
|
||||
{
|
||||
size_t size2 = strlen(s);
|
||||
size_t size = st->size + size2;
|
||||
char * smem = NULL;
|
||||
if (size != 0u)
|
||||
{
|
||||
smem = (char *)malloc(size);
|
||||
memcpy(smem, st->value, st->size);
|
||||
memcpy(&smem[st->size], s, size2);
|
||||
}
|
||||
if (st->value != NULL)
|
||||
{
|
||||
free(st->value);
|
||||
}
|
||||
char * smem = (char *)malloc(size + 1u);
|
||||
memcpy(smem, st->value, st->size);
|
||||
memcpy(&smem[st->size], s, size2);
|
||||
smem[size] = '\0';
|
||||
st->value = smem;
|
||||
st->size = size;
|
||||
return st;
|
||||
@ -55,9 +43,6 @@ String * String_concat(String * st, const char * s)
|
||||
|
||||
void String_free(String * st)
|
||||
{
|
||||
if (st->value != NULL)
|
||||
{
|
||||
free(st->value);
|
||||
}
|
||||
free(st->value);
|
||||
free(st);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user