c char 賦值 字串賦值是什麼意思

2021-10-17 08:01:30 字數 1168 閱讀 3847

字串主要用於程式設計,字串在儲存上類似字元陣列,所以它每一位的單個元素都是可以提取的,如s=「abcdefghij」,則s[1]=「a」,s[9]="j",而字串的零位正是它的長度,如s[0]=10(※上述功能ansistring沒有。),這可以給我們提供很多方便,如高精度運算時每一位都可以轉化為數字存入陣列。

但是字串賦值有一定要求,例如c語言的運算子根本無法操作字串。在c語言中把字串當作陣列來處理,因此,對字串的限制方式和對陣列的一樣,特別是,它們都不能用c語言的運算子進行複製和比較操作。

字串賦值方式

c語言中,字串的表現形式有兩種:一種是以字元陣列的形式,如char str[20]="i love china";另一種是以字元指標的形式,如char *str="i love china"。字串可以賦值給字元指標變數,或者將字串用字元陣列儲存。因為c語言沒有直接對字串提供語法糖方面的支援。而且c標準庫很多方法處理字串是以空字元結尾為前提的,這個必須要記住。

char *p,a='5';

p=&a; //顯然是正確的,

p="abcd"; //但為什麼也可以這樣賦值??

但是char *p = 「hello」;表示式為什麼可以,而把p換成陣列,然後再賦值就不行了。這是因為字串常量」hello」出現在乙個表示式中時,」hello」表示式使用的值就是這些字元所儲存的位址(在常量區),而不是這些字元本身。

所以,可以把字串賦值給指向字元的指標p,而不能把字串賦值給乙個字元陣列。

char a[10] = 「hello」; 這樣也是可以的,這種情況是c語言初始化所支援的。如果寫成char a[10]然後 a = 「hello」 這樣就錯誤了。同樣是a陣列,char a[10] = 「hello」;這種是陣列的初始化,和a[0] = 『h』 a[1] = 『e』…是乙個道理。

但是換成char a [10],然後a = 「hello」就不行了 「hello」賦值的值是乙個位址,而a雖然也有位址,但是這與指標是不一樣的,指標的值是位址,而陣列的值雖然也是位址,但是卻是乙個常量,所以不能給常量賦值。 [3]

我們來測試一下:

#include int main(){ char *p = "hello"; printf("%s

字串的賦值

字串表示方法 char str 20 char ch 賦值操作 1 定義的時候賦值 char str 20 what pity char ch how are you 2 用字串複製函式 strcpy str,what pity 但是對於用指標表示的字串變數用複製函式賦值會出現問題,需要先申請記憶體...

字串賦值,查詢,交換

00401000 ba 90204000 mov edx,00402090 源位址 0040100e b9 01000000 mov ecx,0x1 迴圈次數為1 00401013 f3 a4 rep movs byte ptr es edi byte ptr esi 位元組為單位傳遞 004010...

字串賦值到陣列

c語言 strcpy 函式用於對字串進行複製 拷貝 標頭檔案 string.h char strcpy char strdestination,const char strsource 引數說明 strcpy 會把 strsource 指向的字串複製到 strdestination。必須保證 str...