C中字串的末尾會有**'/0' **,而字元陣列沒有
char name[21]; //字串,最多存放20個英文字元或10箇中文字元,最後一個字元為 ' /0 '
char name[11]; //未初始化,其值為垃圾直
char name[11] = "Hello"; //初始化為Hello,系統自動在末尾新增'/0'
char name[11] = {"Hello"}; //初始化為Hello,系統自動在末尾新增'/0'
char name[] = {"Hello"}; //初始化為Hello,系統自動在末尾新增'/0'
char name[11] {"Hello"}; //初始化為Hello,系統自動在末尾新增'/0'(C++ 11 標準)
char name[11] = {0}; //全部元素初始化為0
使用memset()
函數清空字串
語法:memset(字元陣列的首地址即陣列名,0,陣列記憶體的空間大小)
char name[10];
memset(name,0,sizeof(name));
//結果
0 0 0 0 0 0 0 0 0 0
❗C語言字串不能用" = "賦值
語法:strcpy(目標字串,源字串)
返回值:返回目標字串的首地址
⚠複製完字串後,會自動在目標字串後面追加' /0 '
如果目標字串所指向的記憶體不夠大,則會導致陣列越界
char name[11] = {"Hello"};
char namecpy[11];
strcpy(namecpy,name);
//結果
namecpy[11]——>Hello
語法:strncpy(目標字串,源字串,n個字元)
返回值:返回目標字串的首地址
⚠如果源字串小於n,則拷貝完後會在目標字串後追加' /0 '
如果源字串大於或等於n,則擷取前n個字元,且不會再目標字串後追加' /0 '
如果目標字串所指向的記憶體不夠大,則會導致陣列越界
char name[11] = {"Hello"};
char namecpy[11];
strcpy(namecpy,name,3);
//結果
namecpy[11]——>Hel
語法:strlen(字串的首地址即字串名)
char name [11] = { "Hello" };
cout << strlen(name) << endl;
//輸出結果
5 //檢索到'/0'時結束
語法:strcat(目標字串,源字串) ==目標字串原有的'/0'會被覆蓋掉==
char firstname[10] = {"Hello"};
char lastname[10] = {" World"};
strcat(firstname,lastname);
//執行結果
Hello World
語法:strcat(目標字串,源字串,n個字元) ==目標字串原有的'/0'會被覆蓋掉==
char firstname[10] = {"Hello"};
char lastname[10] = {" World"};
strcat(firstname,lastname,2);
//執行結果
Hello Wo
目標字串與源字串(或源字串前n個字元)比較 | 返回值 |
---|---|
> | 1(ASCII碼的差) |
= | 0 |
< | -1(ASCII碼的差) |
語法:strcmp(目標字串,源字串)
char name1[10] = {"Hello"};
char name2[10] = {"hello"};
strcmp(name1,name2);
//執行結果
-32
語法:strcmp(目標字串,源字串,前n個字元)
char name1[10] = {"Hello"};
char name2[10] = {"hello"};
strcmp(name1,name2,3);
//執行結果
-32
strchr(字串,要查詢的字元) 【是從一個字串str中第一次出現該字元character的位置】
strrchr(字串,要查詢的字元)【是從一個字串str中最後一次出現該字元character的位置】
返回值:如果在字串 str 中找到字元 c,則函數返回指向該字元的指標,存在和首地址相減,可以得到下標。如果未找到該字元則返回 NULL。
語法:strstr(字串,子串)
返回值:返回子串在字串中第一次出現的地址,沒有返回0
5⃣在VS中使用C風格字串是應加上#define _CRT_SECURE_NO_WARNINGS
1⃣字串的結尾標誌為'/0',在處理時會從起始位置開始搜尋直到搜尋到'/0'為止
不會判斷陣列越界的原因:
操作字串的函數形參為指標,只存放了字串的起始地址,沒有字串的長度引數,無法判斷是否越界
2⃣結尾識別符號'/0'後面都是垃圾值
3⃣字串在每次使用前都要初始化
4⃣不要再子函數裡面使用sizeof運運算元(因為子函數中的引數為指標,總是佔8位元組(64位元作業系統))