字串賦值的兩種形式的區別

2021-07-02 21:51:41 字數 1082 閱讀 7775

字串的表現形式有兩種:

一種是以字元陣列的形式,如char buf[20]="i love china";

另一種是以字元指標的形式,如char *str="i love china"

現將乙個字串賦值給乙個字元陣列或乙個字元指標

char buf[20];   char*str;

buf = "i love china";         

strcpy (buf, "i love china");    

str = "i love china";          

strcpy(str, "i love china");     

第一種做法顯然是錯的因為陣列名是常量,不能被賦值,所以如果你想將一字串賦給一字元陣列,只能用strcpy這種方法。

第四種做法也是有問題的,這樣做會出現段錯誤,因為你沒有給

str指標分配記憶體

正確的做法是在之前給它分配一記憶體

str = (char *)malloc(sizeof(char)*20);

strcpy(str, "i love china");

其實還有一種好方法,可以將字串直接賦值給指標,而不用給它分配記憶體釋放記憶體。

那就是先定義乙個字元陣列,將它指定給指標,然後就可以對指標任意賦值了,而不用時刻擔心著,有沒有給它分配記憶體,或者用完後是否釋放了記憶體。

char str[100], *p;

p = str;

strcpy(p, "i love china");

這個方法避免了分配記憶體與釋放記憶體的繁瑣,應借鑑

歸根結底:

陣列名是常量,故不能直接賦值,故只能用strcpy(因陣列已提前分好記憶體了)

指標是變數,故可直接賦值,但不能用strcpy(因指標沒有分配記憶體,除非提前分配好如上)

C語言的兩種字串

c語言中的兩種字串 1.兩種字串的表示 1.字串陣列 char str1 hello char str2 6 hello 注意 在字串 陣列 初始化時sizeof str 的大小應該比你想要的大小 1,因為在作為字串時,會有乙個 0 自動成為字串的元素 上述的例子如果變成 char str2 5 h...

字串的兩種逆序輸出

一 比如輸入 abcd 輸出 dcba include stdio.h include stdlib.h include string.h include char reverse char s p while r p return s int main 二 單詞逆序,比如輸入 you love i...

Java String的兩種賦值方式及區別

1 string s abc 採用字面值方式賦值 1 查詢string pool中是否存在 abc 這個物件,如果不存在,則在stringpool 中建立乙個 abc 物件,然後將string pool中的這個 abc 物件的位址返回來,賦給引用變數s,這樣s會指向string pool中的這個 a...