字串字面值
用雙引號括起來的內容稱為字串字面量,雙引號中的字元和編譯器自動加入末尾的\0字元,都作為字串儲存在記憶體中,如果字串字面量之間沒有間隔,或者用空白字元分隔,c會將其視為串聯起來的字串字面量。字元陣列名和陣列名一樣,指向該陣列的首元素的位址。字串內部想要使用雙引號,在引號前加\
字串陣列初始化
const char ml[10]=
const char ml[10]=「lizk」;
沒有最後的空字元,這就不是乙個字串,而是乙個字元陣列
陣列形式和指標形式
初始化陣列把靜態儲存區的字串拷貝給陣列,而初始化指標只把字串的位址拷貝給指標
只有指標可以進行遞增操作
因為編譯器可能將相同的字串儲存在同乙個位址上,所以如果打算修改字串,就不要用指標指向字串字面量
%s mesg 以字串輸出值
%p &mesg 列印指標的位址
%p mesg輸出指標的值,即儲存的位址
字串輸出
gets()//讀取整行輸入,直到遇到換行符,然後丟棄換行符,儲存其餘字元,並在這些字元末尾新增乙個空字元使其成為乙個c字串
puts//顯示字串,並在末尾新增換行符,遇到空字元停止輸出
gets(word) puts(word)
這個東西,由於編譯器無法檢查陣列能否裝下字串,可能會導致緩衝區溢位 的問題
fgets()//讀到乙個換行符,會把它儲存在字串中
fgets()讀到檔案的結尾,將返回乙個空指標,否則,返回的位址與傳入的第乙個引數相同
第乙個引數,同gets()
第二個引數,指明了讀入字元的最大數量
第三個引數,指明要讀入的檔案,鍵盤讀入,則為stdin
fputs()//顯示字串,不在後面加換行符
讀取過長輸入沒有問題
空字元和空指標
空字元是用來標記字串末尾的字元,其對應字元編碼是0,為整數型別,佔乙個位元組。
空指標的值不會與任何資料的有效位址對應,為指標型別,佔4位元組
gets_s()
只從標準輸入中讀取資料,不需要第三個引數
讀到換行符會丟棄
讀到最大字元都沒有讀取到換行符,會把目標陣列中的首字元設定為空字元,讀取並丟棄隨後的輸入直至讀到換行符或檔案末尾,然後返回空指標。接著呼叫處理函式
s_gets()//自定義函式
//如果字串中出現換行符就用空字元替換,如果字串中出現空
//字元,就丟棄該輸入行的其餘字元,然後返回與fgets()相同的值
char *s_gets(char *st,int n)
return ret_val;
}
字串函式
在 string.h 標頭檔案中
這是乙個超連結
sprintf()函式
第乙個引數是目標字串的位址,其餘引數和printf()相同
sprintf(formal,"%s,%-19s:$%6.2f\n",last,first,prize);
只不過把組合後的字串儲存在陣列formal中而不是顯示在螢幕上
main()函式
main(void)沒有引數
main(int argc,char *argv)或者只有兩個引數
第乙個引數是命令列中的字串數量
argv[0] 程式本身的名稱
argv[1]隨後的第乙個字串
如 輸入 repeat resisitance is futile
argv[1]指向repeat argv[2]指向is 等
將字串轉換為數字
atoi()//int
atol()//long
atof()//double
strtol()//long
strtoul()//unsigned long
strtod()//double
某個栗子
long strtol(const char *restrict nptr,char **restrict endptr,int base);
nptr是指向待轉換字串的指標,endptr是乙個指標的位址,該指標被設定為標識輸入數字結束字元的位址,base表示以什麼進製寫入數字
第十一章 字串和字串函式
第十一章 1 有 0才能叫字串 2 char m3 char m3 後者m3是陣列形式,是乙個位址常量,不能 m3 前者m3是乙個指標變數,可以 m3 3 字串輸入 停止特點 例子特殊用法 gets 遇到換行符 不檢查預留空間,宜溢位 gets name while gets name null 檢...
第十一章 字串和字串函式
github位址,歡迎 star 字串是以空字元 0 結尾的 char 型別陣列。1 字串字面量 字串常量 用雙引號括起來的內容稱為字串字面量 string literal 也叫作字串常量 string constant 雙引號中的字元和編譯器自動加入末尾的 0 字元,都作為字串儲存在記憶體中。字串...
字串和字串函式
字元輸入輸出 getchar putchar ch getchar putchar ch 字串函式 字串輸入 建立儲存空間 接受字串輸入首先需要建立乙個空間來存放輸入的字串。char name scanf s name 上述的用法可能會導致程式異常終止。使用字串陣列 可以避免上述問題 char na...