【发布时间】:2016-03-24 10:17:11
【问题描述】:
这只是在我测试我隔离的更大程序的一部分时发生在我身上。原始函数会以我需要的特殊方式从字符串中删除非 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"); 会起作用。
- 这是预期的行为吗?为什么?
【问题讨论】:
-
什么操作系统?
-
@trojanfoe 更新了标签。
-
确实适用于 MSVC。
-
我认为这个问题可能与文件流的宽方向有关。如果不使用
fwide(),则使用第一个文件函数的方向。一旦流是 wide ,那么您需要使用 wide 函数。您可以通过颠倒使用fprintf()和fwprintf()来确认这一点。 -
一经设置就无法更改。您需要与在(非)宽流上使用(非)宽函数保持一致。
标签: c linux printf stdio wchar-t