字元陣列 字串及常量字串具體解釋

2021-09-08 17:52:50 字數 2393 閱讀 9975

c語言中

void main()
執行結果:

p1和p2所指向的常量字串內容同樣並且位址也同樣。

個人理解由於常量字串位於靜態區,p1指向的「abcd」已經分配了空間,p2所指向的常量字串與p1指向的常量字串同樣。所以不須要另外開闢空間。有些文章說,這取決於編譯器。

常量字串內容不可更改。但能夠通過下標和移動指標來訪問

void main()
執行結果

void main()
以上程式執行都會出錯,在c語言中正確的輸入字串,是通過做夠長的字元陣列來實現

void main()

}

執行結果:

可見在4的末尾有乙個不可見字元『\0』,由於陣列長度為10。後面5個元素沒有賦值,所以出現亂碼。通過gets輸入字串效果和scanf一致。但下面情況須要注意:

void main()
執行結果:

陣列大小為3。按道理最多僅僅能輸入長度為2的字串並在字串最後補乙個'\0',這樣剛好存滿整個陣列。但如今輸入了長度為4的字串並且沒有出錯。但這僅僅是幸運的,非常多情況該程式會崩潰,由於陣列越界,陣列相鄰的空間可能是重要的資料。所以c語言中陣列越界的情況須要程式猿自己去把握,陣列越界帶來的後果是非常嚴重的。

還須要注意一點是,在c語言中用scanf輸入字串會以空格和回車符為間隔

void main()
執行結果:

輸入的字串為「abc空格efg」,但實際儲存的不過「 abc」,所以當想給多個字元陣列賦值時,能夠通過空格或回車來輸入。

void main()
執行結果:

gets則不會出現這樣的情況,這是gets和scanf主要差別,gets和scanf另乙個差別就是gets僅僅能輸入乙個字串,而scanf能夠輸入多個。

gets通過回車來確認字串輸入的結束,scanf通過回車或者空格符來確認字串輸入的結束

void main(); //與char a[10]="1234"等效。在輸入字串最後會補乙個'\0'

printf("%s\n",a); //列印字串

for(int i =0 ;i < 10 ;i++)

}

執行結果:

可見直接初始化字元陣列。預設的空間以'\0'填補。這點與scanf和gets不同。須要注意。

輸出就比較簡單,通過printf和puts就能夠了,兩者的差別在於puts輸出字串之後會換行。

字元陣列非常好理解無非就是char a[10];

void main();

for(int i = 0 ; i< 10;i++)

printf("%c\n",a[i]);

}

執行結果:

可見字元陣列預設的空間以『\0』填補

void main();

puts(a);

}

執行結果:

若字元陣列已滿,並且最後乙個字元不是'\0',則總體輸出陣列超出陣列長度的內容會是亂碼。

字串常量與字串陣列

1 對於 字串,必以 0 結尾,如果是雙引號會在它所包含內容後面自動加乙個 0 且會佔據位元組數。2 字元陣列中若不指定長度,系統會自動分配 char str1 abcde 1,字串常量 char str2 abcde 2,字元陣列,在分配位元組時會在最後加上 0 3 字串 常量的值 不能被修改 因...

字元陣列,字元指標,字串常量

一 字串可以賦值給字元指標變數 char p hello 其實這裡分配了常量,即const,如果不讓p指向別的位址就無法修改。char q world cout p q 1.字串常量 hello 出現在乙個表示式中時,hello 表示式使用的值就是這些字元所儲存的位址 在常量區 而不是這些字元本身。...

字串常量和字元陣列

1.字串常量 char cstringa hello word 並不建議這樣寫 const char cstringb hello word 建議寫成這樣 cstringa a 執行時出錯,字串常量不允許修改 實際上,c語言中的標準,對於字串常量必須要賦值給const char 的變數,這樣就可以理...