【问题标题】:No output when using `fprintf' after `fwprintf'在“fwprintf”之后使用“fprintf”时没有输出
【发布时间】:2016-03-24 10:17:11
【问题描述】:

这只是在我测试我隔离的更大程序的一部分时发生在我身上。原始函数会以我需要的特殊方式从字符串中删除非 ascii 字符,就是这个程序

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

int main(int argc, char *argv[])
{
    fwprintf(stdout, L"-- Example\n");
    fprintf(stdout, "-- Example\n");

    return 0;
}

不会在我的 linux (Fedora 22) 系统上打印第二个 -- Example。虽然再次使用fwprintf()fprintf(stderr, "-- Example\n"); 会起作用。

  • 这是预期的行为吗?为什么?

【问题讨论】:

  • 什么操作系统?
  • @trojanfoe 更新了标签。
  • 确实适用于 MSVC。
  • 我认为这个问题可能与文件流的宽方向有关。如果不使用fwide(),则使用第一个文件函数的方向。一旦流是 wide ,那么您需要使用 wide 函数。您可以通过颠倒使用 fprintf()fwprintf() 来确认这一点。
  • 一经设置就无法更改。您需要与在(非)宽流上使用(非)宽函数保持一致。

标签: c linux printf stdio wchar-t


【解决方案1】:

我相信这个问题可能与文件流的宽方向有关。如果不使用fwide(),则使用第一个文件函数的方向来确定方向(您也可以在打开文件时设置方向,但此处不适用)。

一旦流很宽,那么您需要使用宽函数;当非宽时,您需要使用非宽函数。

方向一旦设置,就无法更改。

【讨论】:

  • 我正在阅读您的回答。我试图改变大方向,正如你所说,不允许改变它。我不明白为什么要强加这种行为。你知道这种行为的原因吗?
猜你喜欢
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多