Se io dichiaro e utilizzare un puntatore come questo:Perché è possibile utilizzare puntatori come stringhe quando vengono dichiarati con virgolette doppie, ma non parentesi graffe, in C?
int counter;
char *pCow = "pCow goes MOO";
for(counter = 0; counter < 14; counter++)
printf("%c", pCow[counter]);
visualizza l'intera stringa e le opere e sì e c'è molto gioia.
Tuttavia, se uso un inizializzatore come questo:
int counter;
char *pCow = {'p','C','o','w',' ','g','o','e','s',' ','M','O','O','\0'};
for(counter = 0; counter < 14; counter++)
printf("%c", pCow[counter]);
il programma si blocca e pCow rifiuta di muggire per il mio piacere edonistico!
3 Warnings. 0 Errors
line 11 (near initialization for 'pCow') [enabled by default] C/C++ Problem
line 11 excess elements in scalar initializer [enabled by default] C/C++ Problem
line 11 initialization makes pointer from integer without a cast [enabled by default] C/C++ Problem
Testato con entusiasmo in Eclipse CDT.
Se questa è la C (e non C++) allora 'char * pCow = (char []) { 'p', 'C', 'o', 'w','', 'g', 'o' , 'e', 's', '', 'M', 'O', 'O', '\ 0'}; 'dovrebbe funzionare e avere lo stesso effetto. – immibis
Si noti che la soluzione @immibis sopra ↑ richiede C99 o superiore. Cerca su _Compound Literals_ per saperne di più. –
Eventuali duplicati di [stringhe letterali vs array di char durante l'inizializzazione di un puntatore] (http://stackoverflow.com/questions/30533439/string-literals-vs-array-of-char-when-initializing-a-pointer) –