Можно ли использовать alloca внутри составной инструкции? Пример:alloca внутри составного оператора
typedef struct
{
size_t len;
char* data;
} string_t;
#define str_to_cstr(str) \
({ \
char* v = alloca(str.len + 1); \
v[len] = 0; \
memcpy(v, str.data, str.len); \
})
// ... and somewhere in deep space
int main()
{
string_t s = {4, "test"};
printf("%s\n", str_to_cstr(s));
return 0;
}
Из моего опыта это работает хорошо, но я не уверен, что это безопасно. Кстати, он скомпилирован с GCC 4.8.4
'v [len]' typo .. – BLUEPIXY
... либо это, либо, 'memcpy (v, str.data, str.len + 1);' –
Хотя то, что вы предлагаете, должно работать, почему бы просто не поддерживать null char в конце '.data' и использовать его (возможно, для' const char * ')? – Dmitri