Ternärer operator printf innen

Nach der Lektüre diese ich begann zu denken, dass ich gelernt habe, eine Beute zu printf(). Plötzlich fand ich folgenden code-snippet aus diese Buch:

int main()
{
    char str[]="Hello";
    int i=5,j=10;
    printf(i>j?"%50s":"%s",str); //unable to understand this 
    return 0;
}

Überraschend obige code läuft ohne Fehler, und es gibt Hallo.
Wie pro meine Kenntnisse nach ist die syntax von printf():

int printf(const char *format,argument_list);

Also laut dieser syntax printf() sollte mit format-string. Aber wie Sie sehen können in obigen code printf() ist ab i>j.
Bedeutet es, dass ich falsch Liege in der Interpretation, die syntax von printf()?
Tut Platzierung ternärer operator innerhalb von printf() ist ein Spezialfall?

BEARBEITEN

Ich weiß, über ternäre operator bin ich zu Fragen über erste argument printf() werden sollte, const char*, das scheine ich nicht in meinem Beispiel.

  • Das Ergebnis des Ausdrucks innerhalb der 1. parameter muss ein Zeiger auf ein konstantes char-array, also nichts überraschendes.
  • Sie bedeuten, dass etwas auch ohne die doppelten Anführungszeichen ist Zeiger auf Konstanten string
  • vielleicht werden die Dinge klarer, wenn Sie schreiben es auf diese Weise: printf((i>j?"%50s":"%s"), str)
  • beide "%50s" und "%s" sind in der Tat Zeiger auf Konstante char-arrays. i>j?"%50s":"%s" ist ein Ausdruck. Das Ergebnis des Ausdrucks muss ein Zeiger auf ein konstantes char-array. Ich glaube du verwechselst ein const char * mit einem Konstanten Ausdruck, die nicht die gleiche Sache
InformationsquelleAutor A.s. Bhullar | 2014-07-02
Schreibe einen Kommentar