Playing with stdio file control structures from msvcrt.dll
#include <tchar.h>
#include <stdio.h>
#define SIZE 256
#undef stdin
#undef stdout
#undef stderr
#pragma comment(lib,"msvcrt.lib")
#ifdef _WIN64
extern char* __imp__iob;
#define stdin (FILE*)&__imp__iob[0]
#define stdout (FILE*)&__imp__iob[sizeof(FILE)]
#define stderr (FILE*)&__imp__iob[2*sizeof(FILE)]
#else
extern char* _imp___iob;
#define stdin (FILE*)&_imp___iob[0]
#define stdout (FILE*)&_imp___iob[sizeof(FILE)]
#define stderr (FILE*)&_imp___iob[2*sizeof(FILE)]
#endif
int mainCRTStartup(void)
{
char buffer[SIZE] = { 0 };
fputs("Was Stalin German, Italian, Russian or Chinese ?:\n", stdout);
while (1)
{
fgets(buffer, SIZE - 1, stdin);
buffer[strcspn(buffer, "\n")] = '\0';
if (_stricmp(buffer, "russian"))
fputs("Wrong, please retry\n", stderr);
else
{
fputs("Correct\n", stdout);
break;
}
}
getchar();
return 0;
}