簡體   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