2012-10-17 3 views
14

Lesen this SO question, begann ich mich fragen - Was ist der richtige Weg, scanf/printf (und Familie) mit festen Größen zu verwenden?Richtiger Weg, scanf/printf (und Familie) mit festen Größen zu verwenden?

Zum Beispiel, wenn ich short int oder int habe, würde ich %hd und %d jeweils verwenden - in Ordnung.

Aber was ist, wenn ich int16_t habe? short int kann sich von int16_t unterscheiden, es ist plattformabhängig. Das gleiche für andere feste (integrale) Typen?


HINWEIS: Wie sieht es aus wie ich einige Abwärts Stimmen erhalten, weil ich „nicht versuchen, diese to google“, sieht es aus wie ich erklären müssen: habe ich nicht Siehe ähnliche Frage hier, deshalb habe ich es gepostet. Die meisten Fragen in SO hätten mit Google beantwortet werden können, anstatt hier zu fragen. Das würde StackOverflow nicht zu dem Ort machen, an dem es aktuell ist.

Und NEIN, habe ich nicht für Reputation getan - ich habe heute schon die tägliche Reputationsgrenze erreicht (mit 24 Stimmen bevor diese Frage gestellt wurde).

Mein Punkt ist - ich glaube nicht, dass dies Down-Stimmen verdient.

+1

Vergessen Sie nicht, Ihren guten Freund Google zu verwenden. ;) Bei der Suche gab es einen Treffer: ["printf int16_t"] (https://www.google.com/#hl=de&output=search&sclient=psy-ab&q=printf+int16_t&oq=printf+int16_t&gs_l=hp.3. ..741.1861.0.2073.8.7.0.0.0.2.267.267.2-1.1.0.les% 3B..0.0 ... 1c.1.7MPX56CVufA & pbx = 1 & bav = on.2, oder.r_gc.r_pw.r_cp.r_qf. & fp = ec63c9d2be74365f & bpcl = 35277026 & biw = 1343 & bih = 748). – Mike

+0

@Mike - Ich habe nicht :) Ich denke, dass es gut wäre, hier ähnliche Fragen zu haben (und nein, nicht wegen des Rufs - ich habe heute schon die tägliche Reputationsgrenze erreicht (mit 24 Upvotes bis jetzt)). Ich glaube nicht, dass dies Stimmen nach unten verdient. –

+0

+1 Mit Ihrer Bearbeitung einverstanden. Danke fürs klarstellen. – Mike

Antwort

13

Der richtige Weg ist inttypes.h zu verwenden, die Standard-Makros für printf Familie definiert und die scanf Familie, z.B.

printf ("%" PRId16, short_int); 
scanf ("%" SCNd16, &short_int); 
+0

Cool, danke :) +1 und akzeptiert. –

+0

Warum ist das besser als '% d'? Wird der Short nicht in 'int' umgewandelt? –

4

Die Header-Datei inttypes.h enthält Makros, die die korrekten Formatbezeichner für Ganzzahlen mit fester Breite definieren, die in stdint.h definiert sind. Der Typspezifizierer für printf() und int16_t ist beispielsweise das Makro mit dem Namen PRId16. Beispiel:

int16_t x; 
scanf("%" SCNd16, &x); 

printf("You have entered: %" PRId16 "\n", x); 
+1

Die Makros enthalten nicht das erforderliche führende Zeichen%. –

+0

@ Steve-o behoben. –

Verwandte Themen