0727
第八章字串
一、字串定義:以』\0』作為結尾標識的一串字元。
字串在記憶體中儲存時,是以字元陣列形式儲存。
字串的管理方式(表示方式):字元指標和字元陣列。
字串與字元陣列:儲存形式相同,但是字串必須有結尾識』\0』。
二、字串初始化:
1)char*p=「hello」;//字元指標管理字串(字元指標儲存於棧區)
//將字串首位址存入指標變數p中;其中「hello」儲存於文字常量區。
//1)字元指標管理字串注意:指標p對字串」hello」只有讀的許可權,並不能對字串「hello」(即文字常量區)的內容修改。如:p=「world」。相當於修改文字常量區的自讀內容。會使系統崩潰(總之:不能通過指標修改文字常量區中的內容)
2)char c[6]=「hello」;//字元陣列管理字串(陣列c儲存於棧區)
//字串儲存於字元常量區,對陣列的賦值相當於將字串「hello」逐個拷貝。到』\0』為止。
3)char c1=「hello」;//同上,陣列的大小根據賦值的字串大小分配。
//一般為了防止內容溢位,採用3)這種初始化方式。
//2)和3)字元陣列管理字串注意:(strlen作用:求字串的長度(不包括『\0』)引數:字串首位址)
修改字串完成後,需要保證陣列中儲存的依舊為字串(即存在『\0』結尾),否則以%s格式輸出可能會出現亂碼。
三、字串操作函式
1> strlen(char* str);//計算字串的長度,字元陣列不計算『\0『;
2> strcpy(char *str1,const char *str2)//複製拷貝字串。str1:目的位址;str2:源位址。
注意:第二個引數為const型別是為了防止通過指標修改str2。
實際上是講
例:char a[20];
char* p = (char*)」hello」;
for(int i=0;ia[i]=p[i];//此時也將字元陣列p最後一位的『\0『也賦給字元陣列a。這樣陣列a中存的是字串。如果沒有將』\0『賦給陣列a,則陣列a中存的只是字元,並不是字串。(字串的定義。)
}printf(「%s\n」,a);
strcpy(a,」hello」);//hello的型別:const char*。將「hello」的首位址作為實參。
1)char *p=「hello」;
strcpy(p,」world」);//不合法。因為:p「指向」的記憶體空間為文字常量區中的空間(許可權為唯讀)
2)char *q;
strcpy(q,」hello」);//不合法。因為:指標並沒有」指向「一塊有效記憶體空間,沒有辦法盛放字串。
補充:printf(char* str1);scanf(char* str2);gets(char* str3);//單指字串的輸入和輸出,這裡不考慮其他型別。
printf(要輸出的字串的首位址);
scanf(可以寫入的記憶體空間的首位址);//輸入字串以空格或回車結束。
gets(char* str3);//輸入字串以回車結束。
作業一:自定義函式求字串長度(strlen)
int array_length(char *p)
return num;
}作業二:自定義函式實現strcpy
void str_cpy(char *p,const char *q)
0728
接0727
三、字串操作函式
3> strcmp:作用:實現兩個字串的比較。(逐個比較字元的ascii碼)
strcmp(引數一,引數二);const char* 例:「hello」
返回值型別:int
>0:引數一「指向」的字元引數二「指向」的字串;
==0:++++++++++++++==++++++++++++++++;
<0:++++++++++++++++
四、字串陣列:相同型別資料的集合
char* a[10];
typedef char* string;//string代替char*
string a[10];//等效於char* a[10];
C語言字串 字串排序
本題要求編寫程式,讀入5個字串,按由小到大的順序輸出。輸入為由空格分隔的5個非空字串,每個字串不包括空格 製表符 換行符等空白字元,長度小於80。按照以下格式輸出排序後的結果 after sorted 每行乙個字串 red yellow blue green white after sorted b...
C語言 字串
char str lnj 字串變數 l n j 0 printf str size lu n sizeof str 字元陣列 這個並不是字串,而是字元陣列 char charvalues 如何輸出字串變數,s str 陣列的名稱,陣列的名稱就是陣列的位址 s的原理,從傳入的 位址 開始逐個取出,直到...
c語言字串
字串 字串1 概念 1.1 定義 1.1.1 用雙引號引起來的多個字元 1.2 兩個連續的雙引號中間是空格或回車,則兩個字串自動連在一起 1.3 遇見 0字串結束,0可以提前終止字串 1.4 初始化 1.4.1 char str 6 1.4.2 char str hello 編譯時自動給 加6 1....