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