в вашем случае это вызывает неопределенное поведение. Но очень похожие структуры используются, если вы добавляете некоторые данные, которые были сохранены в структуре, но их размер неизвестен. Но, конечно, вам нужно выделить место для этого
Пример:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
size_t size;
char string[];
}string;
string *String(void)
{
string *s = malloc(sizeof(string));
if(s) s -> size = 0;
return s;
}
string *StringCopy(string *dest, const string *src)
{
if(!src || !dest) return NULL;
if(dest -> size < src -> size)
{
dest = realloc(dest, src -> size + sizeof(string));
if(!dest) return NULL;
}
memcpy(dest -> string, src -> string, src -> size);
dest -> size = src -> size;
return dest;
}
string *StringCstringCopy(string *dest, const char *src)
{
size_t srcLength;
if(!src || !dest) return NULL;
srcLength = strlen(src);
if(dest -> size < srcLength)
{
dest = realloc(dest, srcLength + sizeof(string));
if(!dest) return NULL;
}
memcpy(dest -> string, src, srvLength);
dest -> size = srcLength;
return dest;
}
int main(void) {
string *s = String();
s = StringCstringCopy(s, "Hello");
// your code goes here
return 0;
}