Gdybym zadeklarować i użyć wskaźnika takiego:Dlaczego można używać wskaźników jako ciągów, gdy są one zadeklarowane z podwójnymi cudzysłowami, ale bez nawiasów klamrowych, w C?
int counter;
char *pCow = "pCow goes MOO";
for(counter = 0; counter < 14; counter++)
printf("%c", pCow[counter]);
wyświetla cały ciąg i prace i tak i nie ma dużo radości.
Jednakże, jeśli mogę użyć inicjator takiego:
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]);
do awarii programu i pCow odmawia moo dla mojego hedonistycznej przyjemności!
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
Pięknie przetestowany w Eclipse CDT.
Jeśli jest to C (a nie C++), to 'char * pCow = (char []) {'p', 'C', 'o', 'w', '', 'g', 'o' , 'e', 's', '', 'M', 'O', 'O', '\ 0'}; 'powinny działać i mieć taki sam efekt. – immibis
Należy zauważyć, że rozwiązanie @immibis powyżej ↑ wymaga C99 lub więcej. Sprawdź w _Compound Literals_, aby dowiedzieć się więcej na ten temat. –
Możliwy duplikat [Literały łańcuchowe vs tablica znaków przy inicjalizacji wskaźnika] (http://stackoverflow.com/questions/30533439/string-literals-vs-array-of-char-when-initializing-a-pointer) –