導語:字符數組是存儲字符的數組,字符串是以雙引號括起來的'/0 '結尾的字符序列。我來為妳介紹壹下C語言字符數組的用法,希望對妳有所幫助!
1,字符數組的定義和初始化
理解字符數組初始化的最簡單的方法是壹個壹個地分配數組中的每個元素。
char str[10]={ 'I ',' ',' a ',' ' m ',' ',' h ',' a ',' p ',' p ',' y ' };
也就是說,10個字符被分別分配給str[0]到str[9]10個元素。
如果大括號中提供的字符數大於數組的長度,將被視為語法錯誤;如果它小於數組的長度,那麽只有這些字符數組中的第壹個元素會被自動設置為空字符(即,'/0 ')。
2.字符數組和字符串
在C語言中,字符串被視為字符數組。(不是在c++中)
在實際應用中,人們關心的是有效字符串的長度,而不是字符數組的長度。比如壹個字符數組定義為100,但是只有40個有效字符。為了度量字符串的實際長度,C語言指定了壹個“字符串結束符”,用字符'/0 '表示。如果有壹個字符串,其中第10個字符是'/0 ',則該字符串的有效字符是9。也就是說,當遇到第壹個字符'/0 '時,表示字符串結束,它之前的字符構成字符串。
系統會自動添加壹個“/0”作為字符串常量的終止符。比如“C程序”*** * *有9個字符,但在內存中占10字節,最後壹個字節'/0 '是系統自動添加的。(可通過sizeof()()函數驗證)
有了結束標誌'/0 ',字符數組的長度就不那麽重要了。在程序中,往往是通過檢測'/0 '的位置來判斷字符串是否結束,而不是通過數組的長度來判斷。當然,在定義字符數組時,我們要估計實際的字符串長度,以保證數組長度總是大於實際的字符串長度。(在實際的字符串定義中,往往不指定數組長度,比如char str[])。
描述:''代表ASCII碼為0的字符。從ASCII碼表中可以發現,ASCII碼為0的字符不是可顯示字符,而是“空運算符”,即什麽都不做。用它作為壹個字符串的結束符號,不會產生額外的操作,也不會增加有效字符,只是作為壹個標識的符號。
從上面了解了C語言中處理字符串的方法後,我們在初始化字符數組的方法中增加了另壹個方法——也就是說,我們可以用字符串常量初始化字符數組:
char str[ ]={ "我很開心" };您可以省略花括號,如下所示
char str[ ]= "我很開心";
註意:上述字符數組的整體賦值只能在字符數組初始化時使用,不能用於字符數組的賦值。字符數組的賦值只能對其元素逐個賦值,下面的賦值方法是錯誤的。
char str[];
str= "我快樂";
不是用單個字符作為初始值,而是用壹個字符串作為初始值(註意:字符串兩端用雙引號括起來,而不是單引號)。顯然,這種方法更加直觀和方便。(註意:數組str的長度不是10,而是11。請記住這壹點,因為在字符串常量“我很高興”的末尾會自動添加壹個'/0 '。)
因此,上述初始化等同於以下初始化。
char str[ ]={'I ',' ',' a ',' m ',' ',' h ',' a ',' p ',' p ','/0 ' };
不等同於以下。
char str[ ]={'I ',' ',' a ',' m ',' ',h ',' a ',' p ',' p ',' y ' };
前者是11,後者是10。
註意:字符數組的最後壹個字符不需要是“/0”,甚至可以不包含“/0”。這樣寫完全合法。
char str[5]={'C ',' h ',' I ',' n ',' a ' };
++++++++
可以看出,用兩種不同的方法初始化字符數組得到的數組長度是不同的。
#包括
無效總管(無效)
{
char c1[]={'I ',' ',' a ',' m ',' ',' h ',' a ',' p ',' p ',' y ' };
char c2[]=“我很開心”;
int I 1 = sizeof(c 1);
int I2 = sizeof(C2);
printf("%d ",I 1);
printf("%d ",I2);
}
結果:10 11。
3、字符串的表示
在C語言中,有兩種方法來表示和存儲字符串:
(1)用字符數組存儲字符串。
char str[ ]=“我愛中國”;
(2)用字符指針指向壹個字符串。
char* str= "我愛中國";
對於第二種表示,有人認為str是壹個字符串變量,在定義字符串變量時將字符串常量“我愛中國”直接賦給字符串變量是錯誤的。
c語言把字符串常量當作字符數組,在內存中打開壹個字符數組來存儲字符串常量。程序在定義字符串指針變量str時,只將字符串的第壹個地址(即存儲字符串的字符數組的第壹個地址)賦給str。
使用字符串輸出的兩種表示形式。
printf("%s ",str);
%s是指輸出壹個字符串,給字符指針變量名str(對於第壹種表示,字符數組名是字符數組的第壹個地址,和第二種表示中的指針含義壹致),然後系統先輸出它所指向的壹個字符的數據,然後自動讓str自動加1指向下壹個字符...,依此類推,直到遇到字符串的結束標識符“/0”。
4.用字符指針變量和字符數組表示字符串的探討。
雖然字符數組和字符指針變量都可以用來存儲和操作字符串,但它們是不同的,不應該混淆。
4.1.字符數組由幾個元素組成,每個元素有壹個字符;地址(字符串/字符數組的第壹個地址)存儲在字符指針變量中,字符串永遠不會放入字符指針變量(字符串的第壹個地址)。
4.2.分配方法:
只能給字符數組的每個元素賦值,不能用以下方式給字符數組賦值。
char str[14];
str= "我愛中國";(但在初始化字符數組時可以使用,即char str[14]=“我愛中國”;)
對於字符指針變量,以下方法用於賦值:
char * a;
a= "我愛中國";
或者char* a= "我愛中國";沒有什麽是不可接受的
4.3.給字符指針變量賦壹個初始值(初始化):
char* a= "我愛中國";
相當於:
char * a;
a= "我愛中國";
用於字符數組的初始化
char str[14]= "我愛中國";
不能等同於:
char str[14];
str= "我愛中國";(這不是初始化,是賦值,像這樣給數組賦值是不對的。)
4.4.如果定義了壹個字符數組,它就有壹個確定的內存地址;在定義字符指針變量時,並不指向某個字符數據,可以多次賦值。
5、字符串處理功能
5.1
char *strcat(char *str1,const char * 2);
char * strcat(char * strDestination,const char * strSource);
函數:函數將字符串str2連接到str1的末尾,並返回指針str1。
註意:前兩個字符串後面有壹個“/0”。連接時,字符串1後的'/0 '被去掉,新字符串末尾只留下壹個'/0 '。
5.2
char *strcpy(char *str1,const char * 2);
char * strcpy(char * strDestination,const char * strSource);
函數:將字符串strSource中的字符復制到字符串strDestination,包括空終止符。返回值是指針strDestination。
註意:1和“字符數組1”必須以數組名的形式書寫,“字符串2”可以是字符數組名,也可以是字符串常量。
2.復制時,將其與字符串後的'/0 '壹起復制到數組1中。
3.不能用賦值語句直接把字符串常量或字符數組賦給字符數組(和普通變量數組壹樣),只能用strcpy函數處理。
4.您可以使用strcpy函數將字符串2中的前幾個字符復制到字符數組1中。
;