我正在创建具有以下格式的 header 的文件

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

最佳答案

您的代码可以与%zd格式说明符一起很好地工作,正如您提到的那样,Visual Studio 2013不支持该格式说明符。问题似乎出在格式说明符本身上。

您可以执行以下任一操作:

  • unsigned long long / int说明符中使用%llu%d值(取决于您的要求;它是可移植的,开销很小,如果是int,则开销很小)。
  • inttypes.h 头文件(在附加的链接下进行解释)与不同的格式说明符一起使用。
  • 关于c++ - sscanf和fprintf不一致?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29996120/

    10-13 05:17