2015-12-17 5 views
6

Это только что произошло со мной при тестировании части более крупной программы, которую я выделил. Оригинальная функция удалит символы не ASCII из строки в особом порядке, что мне нужно, то, что эта программаНет вывода при использовании `fprintf 'после` fwprintf'

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

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

    return 0; 
} 

не печатает бы второй -- Example на моей системы Linux (Fedora 22). Хотя использование fwprintf() снова или fprintf(stderr, "-- Example\n"); будет работать.

  • Это ожидаемое поведение? И почему?
+1

Какая операционная система? – trojanfoe

+0

@trojanfoe Обновлены теги. –

+0

действительно работает с MSVC. –

ответ

1

Я считаю, что эта проблема может быть связана с широкой ориентацией файла. Если fwide() не используется, ориентация первой файловой функции используется для определения ориентации (вы также можете установить ориентацию при открытии файла, но здесь это не применимо).

Как только поток будет широким, вам необходимо использовать широкие функции; и в случае неширокого использования вам необходимо использовать неширокие функции.

Как только ориентация установлена, ее нельзя изменить.

+0

Я читаю ваш ответ. Я попытался вернуться к широкому направлению и, как вы говорите, изменить его не разрешено. Я не понимаю, почему это поведение было наложено. Вы знаете причину такого поведения? –