C语言 字符串
1,一維字符數組
(1)定義
char 數組名 [大小];
(2)初始化字符數組
char s[7]={'h','a','a','p','y'} //其余不確定
char s[ ]=.......? ? ? ? ?//編譯器會計算出數組大小?
static char s[7]={'h','a','a','p','y'}? //其余為0? ?所代表的是字符? ?'\0'
2,字符串
(1)特點
- 字符串的有效長度==有效字符個數
- 字符串由 有效字符 和 字符串結束符'\0'組成
- "Happy"由6個字符組成? 'H' 'a' 'p' 'p' 'y' '\0'
- 字符串輸入數組時,數組長度==有效字符數+1
(2)初始化
以"Happy"為例子
static char s[6]={'H','a','p','p','y','\0'}
static char s[6]="Happy"? ? ? //注意是雙引號
static char s[6]={"Happy"}
(3)字符串輸入和賦值
A.輸入
?static char s[80];
s[0]='a';
s[1]='\0';
B.賦值
static char s[80];
s="a";
"a"和'a'區別:
"a"是由'a' and '0' 兩個字符組成
'a'單指一個字符
(4)其他
static char s[80]="Happy";?
只對前六個賦值,字符串遇到'\0'結束,所以不用擔心。'\0'之后的其他元素和字符串無關。
'\0'不是指ASCII碼值,它是字符,它的ASCII碼值是0,也就是ASCII碼表的第一個字符。'\0'并非是空格,空格的ASCII碼值是32,只不過是輸出類似于空格。
記得將輸入結束符轉換為'\0'.
(5)易錯
1. 下述對C語言字符數組的描述中錯誤的是(C)。
A.不可以用關系運算符對字符數組中的字符串進行比較
B.字符數組中的字符串可以整體輸入、輸出
C.可以在賦值語句中通過賦值運算符"="對字符數組整體賦值
D.字符數組可以存放字符串
A? ?“不可以用關系運算符對字符數組中的字符串進行比較。可以用關系運算符對字符進行操作,卻不能對字符串進行操作
B?在C語言中,字符數組可以存放字符串。字符數組是對字符串有特殊處理能力的數組。字符數組就是用來對字符串進行操作的,當然可以存放字符串,且可以對字符串進行整體輸入、輸出。
C 數組的賦值操作是不能整體操作的,而需要對其中元素逐個賦值,字符數組也不例外。
不可以用賦值語句給字符數組整體賦一串字符.
char mark[80];
mark=“happy”;當字符串變量是用的字符數組,不能由賦值語句直接賦字符串常量.
char Str_1[10]=“hello”;
char Str_2[10];
Str_2=Str_1;以上賦值時不允許的
D 字符數組存放字符串方法如下
static char s[6]="Happy";
3,字符串再次探討
(1)字符串基本特征(補充)
-
字符串是以 0或'\0'結尾的一串字符
-
0標志字符串的結束,但它不是字符串的一部分。計算字符串長度的時候不包含這個0
-
?string.h里有很多處理字符串的函數
a[ ]={'h','e','l','l','a'}
b[ ]={'h','e','l','l','a','\0'}
b是字符串,a不是
(2)字符串常量
- "hello"
- "happy"會被編譯器變成一個字符數組放在某處,長度為6,結尾還有表示結束的'\0'
- 相鄰字符串,無其他符號,則會連在一起
-
?????????#include <stdio.h> int main(){printf("你好,很高興""見到你,我很開心。");return 0; } 輸出:你好,很高興見到你,我很開心。
?字符串常量以字符數組的形式存在
不能進行運算
按照數組遍歷的方法,遍歷字符串
(3)字符串變量
char* str="happy"?
#include <stdio.h>
int main(){char* str="happy"; //初始化指向一個字符串常量char* str2="happy";int i=1;printf("i = %p\n",&i);printf("str = %p\n",str);printf("str2 = %p\n",str2);//str[0]='B'; //[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]printf("%c",str[0]);return 0;
} 輸出:
i = 000000000062FE0C
str = 0000000000404000
str2 = 0000000000404000
i是本地變量,我們發現變量i的內存地址遠遠大于str,str2。
而且更改字符串的話,出現了warning
- 指針str,str2指向了一個很遠的地方。叫做代碼段。只讀,不可更改。所以更改字符串時出現了warning
- 想要更改,使用字符數組
?
?
?(4)char* 是字符串?
- 字符串可以表達為char*
- char*不一定是字符串
- char* 本意是指向字符或字符數組的(類比 int*,指向整型,或整型數組)
- 只有當char* 指向的字符數組,最后一個是'\0'時,才可以稱char* 為字符串
?
?
?
總結
- 上一篇: 个性签名女生阳光气质
- 下一篇: 将字符型的数字转化为整型