指针和字符串
指針和字符串?
[前言] 我們所寫的應(yīng)用程序都需要從網(wǎng)絡(luò)獲取數(shù)據(jù),或者從網(wǎng)絡(luò)下載數(shù)據(jù),這些操作都需要和網(wǎng)絡(luò)另一端的服務(wù)器進(jìn)行數(shù)據(jù)傳輸,這些數(shù)據(jù)都是通過文件進(jìn)行傳輸?shù)?#xff0c;文件中就是字符串,我們程序員需要保證正確解析從網(wǎng)絡(luò)獲取的數(shù)據(jù)文件(解析文件中的字符串),保證數(shù)據(jù)顯示無誤
?
一.認(rèn)識(shí)字符串
在程序中,“”引起來的就是一個(gè)字符串
如果在程序中直接通過“xxx”書寫一個(gè)字符串,這個(gè)字符串就會(huì)立即被存入內(nèi)存(代碼區(qū))(代碼區(qū)是“只讀區(qū)”),在內(nèi)存中“xxx”中每個(gè)字符都會(huì)占用一個(gè)字節(jié),“xxx”這樣的字符串,編譯器自動(dòng)會(huì)在字符串的末尾添加一個(gè)尾零('\0'),這個(gè)尾零作為字符串的結(jié)束標(biāo)識(shí)
“xxx”字符串本身也是一個(gè)表達(dá)式,這個(gè)表達(dá)式的值是字符串中首字符的地址
? //同一個(gè)字符串,在程序中多次書寫,在內(nèi)存中只會(huì)存儲(chǔ)一份
[輸入/輸出字符串]
輸入/輸出字符串需要使用%s格式來表示
[輸入]?
char str[10];scanf("%s",str);[注] %s輸入字符串時(shí),scanf語句從[輸入緩沖區(qū)]讀取字符串?dāng)?shù)據(jù),遇到第一個(gè)空格或者'\n'就會(huì)停止讀取,同時(shí)會(huì)把空 格或者'\n'變?yōu)?span id="ze8trgl8bvbq" class="s2">'\0'添加到字符串的結(jié)尾
[注] 如果想要一次性讀取一行字符串,可以使用以下方法:gets(str);
[注] 從終端讀取一個(gè)字符串一般用一個(gè)字符數(shù)組來存儲(chǔ),但是不論是使用scanf讀取還是使用gets讀取數(shù)據(jù),都必須保 證字符數(shù)組空間足夠大
[輸出]
printf("%s",str);[注] %s輸出字符串時(shí),是從給定地址的第一個(gè)字符開始輸出的,直到遇到'\0'才會(huì)停止輸出
?
二.和字符串操作相關(guān)的庫函數(shù)
 [注] 使用操作字符串的庫函數(shù),需要包含頭文件string.h
<1> strlen,統(tǒng)計(jì)字符串中有效字符個(gè)數(shù)
'\0'不會(huì)被統(tǒng)計(jì)? , '\0'是無效字符
size_t strlen(const char * str);[注] strlen函數(shù)統(tǒng)計(jì)字符串中有效字符個(gè)數(shù)時(shí),遇到第一個(gè)'\0'就停止統(tǒng)計(jì)
<2> strcpy,拷貝一個(gè)字符串到另一個(gè)內(nèi)存中(字符串的復(fù)制)
char * strcpy(char * dest, const char * src);[注] dest對(duì)應(yīng)的目的空間,必須支持寫入數(shù)據(jù),必須足夠大
<3> strcat,將一個(gè)字符串連接到另一個(gè)字符串后面(字符串的連接)
char * strcat(char * str1, const char * str2);[注] str1所在的內(nèi)存空間,必須支持寫入,空間必須足夠大
<4> strcmp,比較兩個(gè)字符串的大小(字符串的比較)?
int strcmp(const char * str1, const char * str2);?返回值 0 ? , 表示 str1 等于 str2
返回值 負(fù)數(shù) , 表示 str1 小于 str2
返回值 正數(shù) , 表示 str1 大于 str2
<5> strstr,從父串中查找子串的位置(字符串的查找)
char * strstr(const char * fatherString, const char * sonString);[注] 如果找到, 返回子串在父串中第一次出現(xiàn)的位置(地址)
如果沒找到, 返回 NULL ( 0 )?
<6> strtok , 將一個(gè)長(zhǎng)字符串分割長(zhǎng)多個(gè)短字符串(分割字符串)
char * strtok(char * string, const char * separater);[注] 實(shí)際使用strtok 去分割字符串時(shí), 調(diào)用一次strtok會(huì)分割到一個(gè)短字符串.并且返回這個(gè)短字符串的地址. 想要分割 得到多個(gè)短字符串,必須通過多次調(diào)用strtok函數(shù)實(shí)現(xiàn)
<7>atoi 函數(shù), -- 將 數(shù)字字符串 轉(zhuǎn)為數(shù)字.[address to int]
例子:?"123" == > 123
       "123abc"? ==> 123      "-123abc" ==> -123
"abc123"? ==> 0
"+123abc" == > 123
?
int? ? atoi(const char *);
轉(zhuǎn)載于:https://www.cnblogs.com/firstsky/p/5892235.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
 
                            
                        - 上一篇: 分享三个非常适合新手的网站
- 下一篇: 《需求分析与系统设计》第三篇
