On Mon, Mar 22, 2004 at 06:24:50PM +0200, Alexander Bokovoy wrote: > > > --- src/lvm.c.orig 2004-01-13 11:37:53.000000000 -0200 > > > +++ src/lvm.c 2004-01-13 11:33:34.000000000 -0200 > > > @@ -32,7 +32,7 @@ > > > > > > /* function to convert a lua_Number to a string */ > > > #ifndef lua_number2str > > > -#define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) > > > +#define lua_number2str(s,n) snprintf((s), sizeof((s)), LUA_NUMBER_FMT, (n)) > > > #endif > > > > > > > Т.е. есть кусок некоторого API, которое broken by design, но его > > кому-то хочется зафиксить. Но в данном случае использование sizeof > > в макросе некорректно, т.к. переменная s может быть указателем, а не > > именем массива, а размер любого указателя всегда равен sizeof(long). > > > > Пока приходит в голову только следующее: > > > > #define lua_number2str(s,n) (sizeof(s) > sizeof(char*)) ? \ > > snprintf((s), sizeof((s)), LUA_NUMBER_FMT, (n)) : \ > > sprintf((s), LUA_NUMBER_FMT, (n)) > Криво, честно говоря. Но в целом, наверное, сойдет. На самом деле это не часть API. :) Так что достаточно проверить src/lvm.c. В целом же, обобщенный оператор sizeof() должен быть RTTI функцией, которая умеет залезать в структуры malloc(). Мечтать не вредно...