Questo pezzo di codice è un po 'strano per i miei gusti. Per favore, qualcuno si preoccupa di spiegare perché? E come forzare '\ n' per essere interpretato come un carattere speciale?Interpretazione ' n' in printf ("% s", stringa)
[email protected]:~/tmp/user/foo/bar$ ./interpretastring.x "2nd\nstr"
1st
str
2nd\nstr
[email protected]:~/tmp/user/foo/bar$ cat interpretastring.c
#include <stdio.h>
int main(int argc, char **argv)
{
char *s="1st\nstr";
printf("%s\n", s);
printf("%s\n", argv[1]);
return 0;
}
In conclusione, l'intenzione è che la seconda stringa venga stampata su due righe, proprio come la prima. Questo programma è una semplificazione. Il vero programma ha problemi a leggere da un file usando fgets
(non un argomento S.O. a argv
come qui), ma penso che risolvere qui risolverà anche lì.
Le escape backslash sono significative nel codice sorgente C * *, ma non sono significative per 'printf' né' fgets' né per altre funzioni di libreria di runtime C. Gli argomenti della riga di comando potrebbero ottenere i loro backslash convertiti in qualcos'altro * dalla shell *, ma non si può contare su ciò che sta accadendo, né si può contare sul fatto che sia coerente con ciò che il compilatore C fa per stringere i letterali. Se vuoi tradurre '\ n' in un carattere di nuova riga nell'input del tuo programma, dovrai farlo tu stesso, a mano. – zwol
Grazie. Commento molto pertinente. Forse esiste già una tale funzione nella vasta libreria C? –
Mi dispiace dire che non esiste una tale funzione. – zwol