Risposte:
Puoi evitarlo pubblicando un doppio '%' come questo: %%
Usando il tuo esempio:
printf("hello%%");
L'escape del segno '%' è solo per printf. Se fate:
char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);
Stampa: This is a's value: %%
%è specifico printf, giusto?
\045è la fuga in fase di compilazione che fa parte della lingua e si trasformerà in %quando compilata. printfè una funzione di runtime, quindi si occupa dei byte della stringa, non del codice sorgente C, e ha le sue sequenze di escape che fanno parte della funzione . In breve, printfè una "lingua dentro una lingua" e printf("This is a's value: %s\n", a);dà lo stesso risultato di printf("This is a's value: \045\0163\012", a);.
printf("hello%c", '%');. Tuttavia, %%è meglio perché non utilizza un altro argomento.
Come altri hanno già detto, %% sfuggirà a%.
Si noti, tuttavia, che non si dovrebbe mai fare questo:
char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);
Ogni volta che devi stampare una stringa, sempre, sempre, stampala sempre usando
printf("%s", c)
per evitare che una% incorporata causi problemi [violazioni della memoria, segfault, ecc.]
Se non ci sono formati nella stringa, puoi usare puts(o fputs):
puts("hello%");
se esiste un formato nella stringa:
printf("%.2f%%", 53.2);
Come notato nei commenti, putsaggiunge \na all'output e fputsnon lo fa.
puts. Non ho mai pensato di putsstampare le stringhe e sono passato subito printf. Non più.
Con se stesso ...
printf("hello%%"); /* like this */
Nitpick:
non sfuggi davvero %alla stringa che specifica il formato per la printf()(e scanf()) famiglia di funzioni.
La %, nella printf()(e scanf()) famiglia di funzioni, inizia una specifica di conversione. Una delle regole per la specifica di conversione afferma che a %come specificatore di conversione (immediatamente dopo quello %che ha avviato la specifica di conversione) causa a'%' scrittura di carattere senza la conversione dell'argomento.
La stringa contiene davvero 2 '%'caratteri (al contrario dei caratteri di escape: "a\bc"è una stringa con 3 caratteri non nulli; "a%%b"è una stringa con 4 caratteri non nulli).
La barra rovesciata in C viene utilizzata per sfuggire ai caratteri nelle stringhe. Le stringhe non riconoscerebbero% come carattere speciale e quindi non sarebbe necessaria alcuna evasione. Printf è un'altra cosa: usa %% per stampare l'1%.
si utilizza identificatore di formato non corretta si dovrebbe usare %%per la stampa %. Il tuo codice dovrebbe essere:
printf("hello%%");
Per saperne di più tutti gli identificatori di formato utilizzati in C .
Puoi semplicemente usare % due volte, cioè"%%"
Esempio:
printf("You gave me 12.3 %% of profit");
Il doppio '%' funziona anche in ".Format (…). Esempio (con iDrawApertureMask == 87, fCornerRadMask == 0.05):
csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;
fornisce il valore desiderato e atteso di (contenuto stringa in) csCurrentLine;"% ADD87C, 0.0500 *% "