Nếu tôi tuyên bố và sử dụng một con trỏ như thế này:Tại sao tôi có thể sử dụng con trỏ làm chuỗi khi được khai báo với dấu ngoặc kép, nhưng không phải dấu ngoặc nhọn, trong C?
int counter;
char *pCow = "pCow goes MOO";
for(counter = 0; counter < 14; counter++)
printf("%c", pCow[counter]);
nó sẽ hiển thị toàn bộ chuỗi và các công trình và vâng và có nhiều niềm vui.
Tuy nhiên, nếu tôi sử dụng một initializer như thế này:
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]);
chương trình bị treo và pCow từ chối Moo cho niềm vui ăn chơi của tôi!
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
Yêu thích được thử nghiệm trong CDT Eclipse.
Nếu đây là C (và không phải C++) thì 'char * pCow = (char []) {'p', 'C', 'o', 'w', '', 'g', 'o' , 'e', 's', '', 'M', 'O', 'O', '\ 0'}; 'sẽ hoạt động và có cùng tác dụng. – immibis
Lưu ý rằng giải pháp @immibis trên ↑ yêu cầu C99 trở lên. Tra cứu trên _Compound Literals_ để biết thêm về nó. –
Có thể trùng lặp của [Chuỗi ký tự so với mảng char khi khởi tạo một con trỏ] (http://stackoverflow.com/questions/30533439/string-literals-vs-array-of-char-when-initializing-a-pointer) –