2012-05-29 20 views
1

我所遇到具有以下類型的線路的一些遺留代碼:sscanf Modifier%Fd掃描的類型是什麼?

的sscanf(szBuff, 「%FD%FF%FD%FF」

有沒有人seeen喜歡的Fd或FF修飾符如果? ?所以,這是什麼意思

我似乎無法找到任何信息的代碼編譯並運行正常

+0

你爲什麼砍在它有趣的地方,即其他sscanf的指定參數和它們的聲明的例子嗎? – Jens

+0

什麼編譯器和/或開發環境? – Throwback1986

回答

1

作爲ouah指出,這些與他們的小寫字母相同。這是爲什麼?爲了與printf轉換說明符對稱。這裏%x%X寫大寫或小寫數字像deadbeefDEADBEEF。對稱性允許對scanf的輸入和printf的輸出使用相同的格式字符串。

#define FMT "%F\n" 

sscanf (str, FMT, &value); 
printf (FMT, value); 
+0

下面是樣本一行代碼:sscanf的(szTemp, 「%FF%FF%FF%FF%d%d%FD%FD FF%%d%d%FS%d」,&sp_fpt0.x,&sp_fpt0.y, &sp_fpt1.x,&sp_fpt1。y, &iMember1,&iMember2,&sp_iMember1End,&sp_iMember2End,&sp_fDist,&iSpliceMember,&iPlumbMember, sp_szOrigLabel,&sp_iPlumbIntLoc); – Jack

+0

這些都是'float'(對於%F ...)和'int'(對於%d)的指針,對吧? – Jens

+0

這是正確的。 %Fs用於char字符串(char sp_szOrigLabel [20]) – Jack

6

ç說,對fscanf功能:

(C99 ,7.19.6.2p14)轉換標識符A,E,F,G和X也是有效的和行爲相同,分別爲A,E,F,G和x。

所以在%Fd,轉換規範是%F這相當於%f。請注意,d不是轉換規範的一部分。

例如(對於fprintf功能%F也是一樣%f):

printf("%fd\n", 3.141592); 

將打印:

3.141592d 


1. C89/C90不識別F轉換說明符。例如,對於在fscanf 7.9.6.2相應C90段落說:轉換標識符E,G,和X是也有效,並且表現一樣,分別E,G,並且x

+0

看來Jack在使用非標準系統,其中「%Fs」實際上需要一個指向char的指針,而「F」是一個修飾符。 – Jens