开发者社区> 问答> 正文

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

我想从阅读_O_U16TEXT格式的内容stdin。但是fgetwc,fgetws在这种模式下似乎效果不佳。 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); wchar_t ws = (wchar_t)malloc(100); fgetws(ws, 100, stdin); wprintf(L"read: %s\n", ws); wchar_t r = (wchar_t)malloc(100); fgetws(r, 100, stdin); wprintf(L"read: %s\n", r); free(ws); free(r); return 0; } 我希望我输入两个字符串,然后将它们保存在ws和中r。但是在输入一个字符串之后,程序停止了,并且r是\n。

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

展开
收起
被纵养的懒猫 2019-09-30 14:56:55 473 0
0 条回答
写回答
取消 提交回答
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载