In message <[email protected]>, Kushal Kumaran wrote:
> On Sun, Jun 27, 2010 at 5:16 PM, Lawrence D'Oliveiro > <[email protected]_zealand> wrote: > >>In message <[email protected]>, Kushal >> Kumaran wrote: >> >>> On Sun, Jun 27, 2010 at 9:47 AM, Lawrence D'Oliveiro >>> <[email protected]_zealand> wrote: >>> >>>> A long while ago I came up with this macro: >>>> >>>> #define Descr(v) &v, sizeof v >>>> >>>> making the correct version of the above become >>>> >>>> snprintf(Descr(buf), foo); >>> >>> Not quite right. If buf is a char array, as suggested by the use of >>> sizeof, then you're not passing a char* to snprintf. >> >> What am I passing, then? > > Here's what gcc tells me (I declared buf as char buf[512]): > sprintf.c:8: warning: passing argument 1 of ‘snprintf’ from > incompatible pointer type > /usr/include/stdio.h:363: note: expected ‘char * __restrict__’ but > argument is of type ‘char (*)[512]’ > > You just need to lose the & from the macro. Why does this work, then: l...@theon:hack> cat test.c #include <stdio.h> int main(int argc, char ** argv) { char buf[512]; const int a = 2, b = 3; snprintf(&buf, sizeof buf, "%d + %d = %d\n", a, b, a + b); fprintf(stdout, buf); return 0; } /*main*/ l...@theon:hack> ./test 2 + 3 = 5 -- http://mail.python.org/mailman/listinfo/python-list
