Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No output when using `fprintf' after `fwprintf'

This just happened to me while testing a part of a bigger program that I isolated. The original function would remove non ascii characters from a string in a special manner that I needed, the thing is this program

#include <stdio.h>
#include <wchar.h>

int main(int argc, char *argv[])
{
    fwprintf(stdout, L"-- Example\n");
    fprintf(stdout, "-- Example\n");

    return 0;
}

would not print the second -- Example on my linux (Fedora 22) system. Although using fwprintf() again or fprintf(stderr, "-- Example\n"); would work.

  • Is this the expected behavior? And why?
like image 308
Iharob Al Asimi Avatar asked Dec 17 '15 19:12

Iharob Al Asimi


1 Answers

I believe this issue might be related to the wide orientation of the file stream. If fwide() is not used then the orientation of the first file function is used to determine the orientation (you can also set the orientation when opening file, but that doesn't apply here).

Once the stream is wide then you need to use wide functions; and when non-wide you need to use non-wide functions.

Once the orientation is set, it cannot be changed.

like image 196
trojanfoe Avatar answered Oct 07 '22 01:10

trojanfoe