Linux下wprintf只输出fgetws获得的第一个字符

claire_wu 2010-02-24 05:34:50
1> 用putty 来登录Linux, putty的character set 是UTF-8
Linux的环境变量$LANG是en_US.UTF-8

2> 代码,格式是UTF-8

#include<stdio.h>
#include <locale.h>
int main(void)
{
setlocale(LC_ALL,"");
wchar_t inp[6];
fgetws(inp, 6, stdin); //input 1234
wprintf(L"%s", inp); //it will only output 1

wchar_t *inp2="1234";
wprintf(L"%s", inp2); //it will output 1234

return 0;
}

3>结果
请看注释。debug进去发现fgetws执行后inp是1234,不知道为什么wprintf只能输出第一个字符。

...全文
275 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
helpxs 2011-01-10
  • 打赏
  • 举报
回复
printf("%S",)
Cowincent 2010-02-24
  • 打赏
  • 举报
回复
呵呵 这么奇怪的....
stardust20 2010-02-24
  • 打赏
  • 举报
回复
不知道算不算特殊情况。。。之前都是用char数组来存那些汉字的。。两个char存一个数。。也用得挺好的。。
claire_wu 2010-02-24
  • 打赏
  • 举报
回复
我在使用wprintf/fgetws时,碰到很多异常现象。
比如wprintf/fgetws(....,stdin)使用后,printf可能就无法输出,或者接下来再使用fgetws(...,stdin)时,fgetws不会读stdin.

很困惑,不知道除了fgetws(..,stdin)能够从stdin读unicode,还有没有其他更好的办法
claire_wu 2010-02-24
  • 打赏
  • 举报
回复
第一个改成大写是可以了,但是第二个要是写成大写S,就会输不全
stardust20 2010-02-24
  • 打赏
  • 举报
回复
第二个也可以大小吧。。没仔细研究过。。。那个可以用吗?
claire_wu 2010-02-24
  • 打赏
  • 举报
回复
谢谢stardust20, 请问为什么第一个wprintf里面的S需要大写,第二个需要小写呢?
stardust20 2010-02-24
  • 打赏
  • 举报
回复
这是我要ubuntu下调成功的代码
#include <stdio.h>
#include <wchar.h>//我还要包含这个头文件
#include <locale.h>
int main(void)
{
setlocale(LC_ALL,"");
wchar_t inp[6];
fgetws(inp,6,stdin);
wprintf(L"%S",inp); //这边S要大写

wchar_t *inp2="1234";
wprintf(L"%s",inp2);

return 0;
}

claire_wu 2010-02-24
  • 打赏
  • 举报
回复
是很奇怪 在window VC环境下, 就可以正确显示
traceless 2010-02-24
  • 打赏
  • 举报
回复
有这么奇特。。。。。。。。。。。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧