我在代码中同时使用 printf
和 wprintf
函数时遇到问题。如果先打印常规字符串,则 wprintf
不起作用。如果我先使用 wprintf
,则 printf
不起作用。
#include <stdio.h>
#include <wchar.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL,"");
printf("No printing!\n");
wprintf(L"Printing!\n");
wprintf(L"Wide char\n");
printf("ASCII\n");
return 0;
}
输出:
No printing!
ASCII
同时
#include <stdio.h>
#include <wchar.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL,"");
wprintf(L"Printing!\n");
printf("No printing!\n");
wprintf(L"Wide char\n");
printf("ASCII\n");
return 0;
}
输出:
Printing!
Wide char
我在 64 位 Linux 3.0 上使用 gcc (GCC) 4.6.1 20110819 和 glibc 2.14。
最佳答案
这是意料之中的;您的代码正在调用未定义的行为。根据 C 标准,每个 FILE
流都与一个“方向”(“字节”或“宽度”)相关联,该方向由对其执行的第一个操作设置,并且可以使用fwide
函数。调用任何其方向与流的方向冲突的函数会导致未定义的行为。
关于c - 单个 C 代码中的 printf 和 wprintf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8681623/