C語言中沒有string類型,字符串都是經過char字符數組來存儲的數組
char * str = "Hello" (字符指針)安全
char str[6] = "Hello" (字符數組)函數
char line[10] = "Hello" 編譯器編譯後數組長度爲6,自動生成\0都是{'H','e','l','l','o','\0'}指針
當用char *str 初始化字符串數組以後,該數組爲只讀數組(其實是const常量,不可修改),在代碼段中,不能夠對其修改,如s[0] = ‘s’,否者報錯字符串
char * str = "Hello" 等價於char * str; str = "Hello"編譯器
當用char str[6]初始化字符串數組以後,該數組是能夠修改的string
只能使用 char str[6] = "Hello",不能夠char str[6]; str[6] = "Hello"編譯
若是要構造字符串,用數組變量
若是要處理字符串,用指針tab
char *表示的是字符串或者是單個字符
要寫入字符串數組,要開闢新的空間(之後補充)
對於逃逸字符,能夠使用//來輸出
字符串的輸入和輸出
char string[8];
scanf("%s",&string);
printf("%s",string);
輸入輸出以空格,tab和回車來區分 好比輸入hello world! 只能讀取到hello,輸入hello
可是scanf若是輸入超過8個字符,會發生abort數組越界
建議——安全的輸入
scanf("%7s",&string);表示輸入的字符只取7個字符,剩餘的不要了(第8個給'\n')
常見錯誤
char * string;
scanf("%s",&string)
只是定義字符串指針變量,沒有初始化,會報錯
常見的string函數
#include<string.h>
strlen函數,用於返回s的長度,不包括\0
strcmp函數,比較兩個函數的大小,返回 0:長度相等 比較字符串中從第一個開始一直到有不一樣的值,之間ASCII的差值
strcpy函數,將第二個參數字符串拷貝到第一個字符串
strcat函數,作鏈接,將第二個參數字符串拷貝到第一個字符串後面
安全問題
若是拷貝或者鏈接並不知道目的地的空間,