I am testing code:
| #include <stdio.h> | | void main( void ) | { | printf( "The file handle for stdin is %p %d\n", stdin, _fileno( stdin )); | printf( "The file handle for stdout is %p %d\n", stdout, _fileno( stdout )); | printf( "The file handle for stderr is %p %d\n", stderr, _fileno( stderr )); | }
I link with no libraries and get following output:
| The file handle for stdin is 00424A30 0 | The file handle for stdout is 00424A50 1 | The file handle for stderr is 00424A70 2
If I link with msvcrtd.lib, then output is:
| The file handle for stdin is 004150B0 270578480 | The file handle for stdout is 004150D0 270608264 | The file handle for stderr is 004150F0 0
And this I get with msvcrt.lib:
| The file handle for stdin is 004150B0 2013313950 | The file handle for stdout is 004150D0 2013328746 | The file handle for stderr is 004150F0 0
Calls to freopen(), fprintf(), setvbuf() using any std* stream throws an exception in last two cases (msvcrtd.lib and msvcrt.lib). I guess pointers are left uninitialized. Anybody knows why and how to make this code work in all three cases?