为什么fgetws在_O_U16TEXT模式下不能很好地工作?

时间:2019-09-30 06:48:42

标签: c

我想从_O_U16TEXT中读取stdin格式的内容。但是fgetwcfgetws似乎不适用于该模式。 fgetws返回带有\n的字符串。但是,它不会消耗\n。结果,下次我调用fgetws时,它只返回一个'\ n'。 fgetwc也会发生这种情况。 我想知道为什么fgetws不消耗\n而是返回带有\n的字符串以及如何正确读取_O_U16TEXT的情况?

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <string.h>
#include <io.h>
#include <fcntl.h>

int main()
{   
    _setmode(_fileno(stdin), _O_U16TEXT);
    _setmode(_fileno(stdout), _O_U16TEXT);
    wchar_t ws[100];
    fgetws(ws, 100, stdin);
    wprintf(L"read: %s\n", ws);
    wchar_t r[100];
    fgetws(r, 100, stdin);
    wprintf(L"read: %s\n", r);
    return 0;
}

我希望输入两个字符串,并将它们保存在wsr中。但是在输入一个字符串之后,程序停止了,并且r\n

  

我的操作系统是win10,编译器gcc 8.1.0。

1 个答案:

答案 0 :(得分:0)

这是MinGW编译器中的错误。在_O_U16TEXT模式下,即使您键入一次,其fgetws函数也会读取两次换行符。您可能要跳过其他每行(以防万一,请检查要跳过的行是否为空)。