[英]How can I get how many bytes sscanf_s read in its last operation?
我編寫了一個快速內存閱讀器類,它模擬與fread
和fscanf
相同的功能。
基本上,我使用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測試它。
sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l
這些函數中的每一個都返回成功轉換和分配的字段數; 返回值不包括已讀但未分配的字段。 返回值0表示未分配任何字段。 如果出現錯誤,或者在第一次轉換之前到達字符串的結尾,則返回值為EOF。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.