我正在创建具有以下格式的 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/