On 06/29/2010 06:25 PM, Lawrence D'Oliveiro wrote: > I have yet to find an architecture or C compiler where it DOESN’T work. > > Feel free to try and prove me wrong.
Okay, I will. Your code passes a char** when a char* is expected. Every compiler I know of will give you a *warning*. Mistaking char*, char**, and char[] is a common mistake that almost every C program makes in the beginning. Now for the proof: Consider this variation where I use a dynamically allocated buffer instead of static: #include <stdio.h> int main(int argc, char ** argv) { char *buf = malloc(512 * sizeof(char)); const int a = 2, b = 3; snprintf(&buf, sizeof buf, "%d + %d = %d\n", a, b, a + b); fprintf(stdout, buf); free(buf); return 0; } /*main*/ On my machine, an immediate segfault (stack overrun). Your code only works because your buf is statically allocated, which means &buf==buf. But this equivalance does not hold for any other situation. If your buffer was dynamically allocated on the heap, instead of passing a pointer to the buffer (which *is* what buf itself is), you are passing a pointer to the pointer, which is where buf is stored on the stack, but not the buffer itself. Instant stack corruption. -- http://mail.python.org/mailman/listinfo/python-list