繁体   English   中英

如何获取sscanf_s在其上一次操作中读取的字节数?

[英]How can I get how many bytes sscanf_s read in its last operation?

我编写了一个快速内存阅读器类,它模拟与freadfscanf相同的功能。

基本上,我使用memcpy并增加了一个内部指针来读取像fread这样的数据,但我有一个fscanf_s调用。 我使用了sscanf_s ,除了它没有告诉我从数据中读出了多少字节。

有没有办法告诉sscanf_s在上一次操作中读取了多少字节,以增加字符串阅读器的内部指针? 谢谢!

编辑:

我正在阅读的示例格式是: |172|44|40|128|32|28|

fscanf读得很好,sscanf也是如此。 唯一的原因是,如果它是:

|0|0|0|0|0|0|

长度会有所不同。 我想知道的是fscanf如何知道放置文件指针的位置,但sscanf不知道。

使用scanf和family,在格式字符串中使用%n 它不会读取任何内容,但它会导致到目前为止读取的字符数(通过此调用)存储在相应的参数中(需要int* )。

也许我很傻,但无论如何我都会尝试。 从评论主题来看,似乎还存在一些误解。 您需要知道字节数。 但该方法仅返回读取的字段数量或EOF。

要获得字节数,请使用您可以轻松计算的内容,或使用格式字符串中的大小说明符。 否则,您将无法找到读取的字节数,然后逐个遍历字段。 另外,你的意思是

sscanf_s(source, "%d%d"...) 

将在“123 456”和“10 \\ t30”两个输入上成功,这两个输入具有不同的长度。 在这些情况下,除非您将其转换回来,否则无法分辨大小。 所以:使用固定大小的字段,或遗忘......

重要说明:请记住,在使用%c它是在输出中包含字段分隔符(换行符,制表符和空格)的唯一方法。 所有其他人将跳过字段边界,使得找到正确数量的字节变得更加困难。

编辑:
从“C ++完整参考”我刚读到:

%n接收一个等于到目前为止读取的字符的nubmer的整数值

这不正是你追求的吗? 只需将其添加到格式字符串中即可。 在这里得到了证实 ,但我没有用sscanf_s测试它。

来自MSDN:

sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l  

这些函数中的每一个都返回成功转换和分配的字段数; 返回值不包括已读但未分配的字段。 返回值0表示未分配任何字段。 如果出现错误,或者在第一次转换之前到达字符串的结尾,则返回值为EOF。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM