在使用`fwprintf`之后,使用`fprintf`无输出

8

在我测试一个独立的程序部分时,发生了这样的事情。原始函数按一种特殊方式从字符串中删除非ASCII字符,而我需要这个功能。问题是这个程序

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

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

    return 0;
}

在我的Linux(Fedora 22)系统上,不会打印第二个-- Example。虽然再次使用fwprintf()fprintf(stderr, "-- Example\n");可以解决问题。

  • 这是预期的行为吗?为什么?

1
什么操作系统? - trojanfoe
可以在MSVC上工作。 - Weather Vane
1
我认为这个问题可能与文件流的宽度有关。如果没有使用fwide(),则使用第一个文件函数的方向。一旦流变得“宽”,你就需要使用“宽”函数。你可以通过反转fprintf()fwprintf()的使用来确认这一点。 - trojanfoe
@trojanfoe 我刚刚在 fprintf(stdout, "-- Example\n"); 之前尝试了 fwide(stdout, -1),但仍然不起作用。虽然你的观点很有道理,如果 fwprintf() 调用了 fwide(),那么 fprintf() 也可能会调用它。 - Iharob Al Asimi
1
一旦设置,您就无法更改它。在(非)宽流上使用(非)宽函数时,您需要保持一致。 - trojanfoe
显示剩余2条评论
1个回答

2
我认为这个问题可能与文件流的宽方向有关。如果没有使用fwide(),则第一个文件函数的方向将被用来确定方向(你也可以在打开文件时设置方向,但这里不适用)。
一旦流变宽,你需要使用宽字符函数;而当非宽字符时,你需要使用非宽字符函数。
一旦方向被设置,就不能更改。

1
我正在阅读你的回答。我尝试恢复宽方向,但正如你所说,不允许更改。我不明白为什么要强制执行这种行为。你知道这种行为的原因吗? - Sir Jo Black

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接