【问题标题】:sscanf and fprintf not consistent?sscanf 和 fprintf 不一致?
【发布时间】:2015-05-01 22:32:33
【问题描述】:

我正在创建一个带有以下格式标题的文件

file = fopen(fname, "wb");
size_t ground_cnt, obj_cnt;
(...)
fprintf(file, "ground %Iu object %Iu %Iu\n", ground_cnt, obj_cnt, sizeof(size_t);

但是,当我尝试将其解析回来时,以下格式只会返回第一个值

char aux_line[4096];
size_t ground_cnt, obj_cnt, size;

file = fopen(fname, "rb"); 
fgets(aux_line, 4096, file);
sscanf(aux_line, "ground %Iu object %Iu %Iu\n", &ground_cnt, &obj_cnt, &size);

可能出了什么问题?

注意我使用的是 MSVC (Visual Studio 2013),因此我必须使用 %Iu 格式说明符,因为不支持 %zu

【问题讨论】:

标签: c++ c


【解决方案1】:

您的代码适用于 %zd 格式说明符,正如您所提到的,Visual Studio 2013 不支持该格式说明符。问题似乎出在格式说明符本身。

你可以做的是:

  1. unsigned long longint 值与%llu/%d 说明符一起使用(取决于您的要求;它将是可移植的,并且在int 的情况下开销将最小或没有)。李>
  2. 使用带有不同格式说明符的inttypes.h 头文件(在所附链接下解释)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    相关资源
    最近更新 更多