字串的表現形式有兩種:
一種是以字元陣列的形式,如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...