Was ist der Unterschied zwischen% d und% * d in der Sprache c?

8

Was ist %*d ? Ich weiß, dass %d für integers verwendet wird, also denke ich, dass %*d auch nur auf Integer bezogen sein muss? Was ist der Zweck davon? Was macht es?

%Vor%

Ergebnis ist

%Vor%     
Parag 30.03.2012, 04:31
quelle

3 Antworten

17

%*d in printf ermöglicht Ihnen die Verwendung einer -Variablen zur Steuerung der Feldbreite in folgenden Zeilen:

%Vor%

was Ihnen folgendes gibt:

%Vor%

(wobei jedes . Zeichen ein Leerzeichen ist). Das * konsumiert ein Argument wid und das d konsumiert das 42 .

Die Form, die Sie haben, wie:

%Vor%

ist ein undefiniertes Verhalten gemäß dem Standard, da Sie vier Argumente nach der Formatzeichenfolge angeben sollten, nicht zwei (und gute Compiler wie gcc werden Ihnen davon erzählen, wenn Sie die Warnstufe). Von C11 7.20.6 Formatted input/output functions :

  

Wenn nicht genügend Argumente für das Format vorhanden sind, ist das Verhalten nicht definiert.

Es sollte etwa so aussehen:

%Vor%

Und der Grund, warum Sie die seltsame Ausgabe bekommen, liegt an diesem undefinierten Verhalten. Dies ist ausgezeichnet antwort zeigt dir die Art von Dingen, die schiefgehen können (und warum), wenn du die Regeln nicht befolgst, besonders in Bezug auf diese Situation.

Jetzt würde ich nicht erwarten, dass dies ein Fehlausrichtungsproblem ist, da Sie int für alle Datentypen verwenden, aber wie bei allen undefinierten Verhalten kann alles passieren.

    
paxdiablo 30.03.2012 04:53
quelle
10

Bei Verwendung mit scanf () - Funktionen wird eine ganze Zahl analysiert, aber das Ergebnis wird nirgends gespeichert.

Bei Verwendung mit printf () - Funktionen bedeutet dies, dass das width-Argument durch das nächste Format-Argument angegeben wird.

    
Jonathan Wood 30.03.2012 04:37
quelle
5

Das * wird als Hinweis darauf verwendet, dass die Breite als Parameter von printf

übergeben wird     
guga 30.03.2012 04:38
quelle

Tags und Links