c++中字符數組,字符串的賦值方法總結

1、我們可以在定義的時候給他賦值
char *p = “hello”
char pf[20] = “word”
注意:不能先定義再給它賦值,如char a[10]; a[10]=“hello”;這樣是錯誤的!
2、定義之後我們可以利用strcpy進行賦值
例如;char a[20] ;
strcpy(a,“hello”);
易錯情況:
1、char a[10];

a[10]=“hello”;

一個字符怎麼能容納一個字符串?況且a[10]也是不存在的!
2、char a[10];

a=“hello”;

這種情況容易出現,a雖然是指針,但是它已經指向在堆棧中分配的10個字符空間,現在這個情況a又指向數據區中的hello常量,這裏的指針a出現混亂,不允許!
3、補充一點 char *a;

a=“hello”;

這種情況是正確的。這樣賦值給a的是字符串“hello”第一個元素的地址。

還有:不能使用關係運算符“==”來比較兩個字符串,只能用strcmp() 函數來處理。

C語言的運算符根本無法操作字符串。在C語言中把字符串當作數組來處理,因此,對字符串的限制方式和對數組的一樣,特別是,它們都不能用C語言的運算符進行復制和比較操作。

直接嘗試對字符串進行復制或比較操作會失敗。例如,假定str1和str2有如下聲明:

char str1[10], str2[10];

利用=運算符來把字符串複製到字符數組中是不可能的:

str1 = “abc”;

str2 = str1;

C語言把這些語句解釋爲一個指針與另一個指針之間的(非法的)賦值運算。但是,使用=初始化字符數組是合法的:

char str1[10] = “abc”;

這是因爲在聲明中,=不是賦值運算符。

試圖使用關係運算符或判等運算符來比較字符串是合法的,但不會產生預期的結果:

if (str1==str2) …

這條語句把str1和str2作爲指針來進行比較,而不是比較兩個數組的內容。因爲str1和str2有不同的地址,所以表達式str1 == str2的值一定爲0。 
————————————————
版權聲明:本文爲CSDN博主「xiaozhen321」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xiaozhen321/article/details/10645677

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章