【问题标题】:Why writing wchar string to file doesn't work in C为什么将 wchar 字符串写入文件在 C 中不起作用
【发布时间】:2018-11-18 20:31:08
【问题描述】:

我希望我的程序从用户那里获取一个 wchar 字符串并将其打印到文件中,但是即使它正确地将字符串打印到命令提示符,当涉及到文件时它只打印 ascii 字符,任何其他字符字符打印不正确。

示例: 而不是写“olá”,而是打印“ol”

#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main(){
    FILE *pst = fopen("C:\\teste1.txt","a");
    wchar_t word[100];
    fgetws(word,20,stdin);
    fputws(word,stdout);
    fputws(word,pst);
    fwprintf(pst,word);
    return 0;
}

【问题讨论】:

  • 离开前关闭文件。但是您需要说出“不起作用”的意思
  • 您如何查看文件?
  • 怎么打开?用开罐器?
  • 您的双击行为完全取决于您的环境,我们对此一无所知。如果它在记事本中打开,那么您不会看到某些字符也就不足为奇了。
  • 您可以在记事本中键入相同的文本吗?然后保存、关闭并重新打开?

标签: c file wchar-t wchar


【解决方案1】:

所发布的代码的行为应如此。

Georgioss-MBP:~ gsamaras$ g++ -o m main.cpp 
Georgioss-MBP:~ gsamaras$ ./m
olá
olá
Georgioss-MBP:~ gsamaras$ cat test.txt 
olá
olá

从终端执行此操作,因为问题可能是您正在从文本编辑器查看文件,其编码未设置为正确显示宽字符。

【讨论】:

  • 你是对的,当我从终端读取文件时它可以工作,谢谢你,虽然现在我需要找到一种方法让它与记事本一起工作
  • 好消息@PauloCezarSousaPaes。我不使用记事本,所以我无能为力,但我很确定互联网可以解决这个问题。
  • 正确的做法是使用记事本。我个人只使用记事本为自己写简短的临时笔记。即使这样做也很尴尬,因为它的“撤消”深度限制为 1....
  • @EugeneSh。 Notepad++ 很容易升级,Paulo 可以考虑尝试一下。
猜你喜欢
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 2023-01-06
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多