const double PI = 3.1415保護(hù)數(shù)據(jù),使得PI不能被修改。const int day[3] = [1, 2, 3],day[1] = 3是會發(fā)生編譯錯誤的。-
double rates[2] = [1.1, 2.2]; const double * pd = rates;這表明不能使用指針pd去改變它所指向的值, 但可以讓pd指向別處:*pd = 3.3// 不允許pd[1] = 4.4//不允許rates[0] = 3.3// 允許pd++;//讓pd指向rates[1],允許 首先,把
const數(shù)據(jù)或非const數(shù)據(jù)的地址初始化為指向const的指針或為其賦值是合法的;但是,只能把非const數(shù)據(jù)的地址給普通指針。const可以聲明并初始化一個個不能指向別處的指針。如double * const pc = rates;指針pc不能指向別處。最后,在創(chuàng)建指針時,還可以使用
const兩次,該指針既不能改別它所指向的地址,也不能改變指向地址上的值。
fgets(char *restrict, int, FILE *) 和 gets(char *) 區(qū)別
-
fget()函數(shù)的第二個參數(shù)指明了讀入字符的最大數(shù)量。如果該參數(shù)的值是n,那么fgets()將讀入 n-1 個字符,或者讀到遇到的第一個換行符為止。 - 如果
fgets()讀到一個換行符,會把它存儲在字符串中。這點(diǎn)與get()不同,get()會丟棄換行符。 - 如果
fget()函數(shù)的第3個參數(shù)指明要讀入的文件。如果讀入從鍵盤輸入的數(shù)據(jù),則以stdin作為參數(shù),該標(biāo)識符定義在stdio.h中。
gets_s()與fgets()區(qū)別
-
gets_s()是C11中新增的,并且是stdio.h輸入/輸出函數(shù)系列的可選擴(kuò)展。 -
gets_s()只從標(biāo)準(zhǔn)輸入中讀取數(shù)據(jù),所以不需要第3個參數(shù)。 - 如果
gets_s()讀到換行符,會丟棄它而不是存儲它。 - 如果
gets_s()讀到最大字符數(shù)都沒有讀到換行符,會執(zhí)行一下幾步。首先把目標(biāo)數(shù)組中的首字符設(shè)置為空字符,讀取并丟棄隨后的輸入知道讀到換行符或文件結(jié)尾,然后返回空指針。接著,調(diào)用依賴實(shí)現(xiàn)的“處理函數(shù)”(或者你選擇的其它函數(shù)),可能會中止或退出程序。
string.h中的常用字符串處理函數(shù)
-
size_t strlen(const char * s)函數(shù)用于統(tǒng)計字符串的長度(其實(shí)是統(tǒng)計字符串開始到\0的字符個數(shù))。 -
char *strcat(char * restrict s1, const * restrict s2)函數(shù)接受兩個字符串座位參數(shù),并把第2個字符串的備份附加在第1個字符串末位,并把拼接后形成的新字符串座位第1個字符串,第2個字符串不變。(拼接字符,要保證第1個字符串的長度要夠,而且返回的字符串地址,就是第一個字符串地址)。缺點(diǎn):不會檢查第1個字符串是否會溢出。 -
char *strncat(char * restrict s1, const * restrict s2, size_t n)該函數(shù)的第3個參數(shù)指定了最大添加字符數(shù),在添加到size_t個字符或者遇到空字符時停止。 -
int strcmp(char *, char *)函數(shù)比較字符串的內(nèi)容是否相等,而不是指針。如果字符串相同,函數(shù)返回0。如果遇到不想等的字符,如比較"A"和"B"則返回"-1",如比較"B"和"A"則返回"1"。 -
int strncmp(char *, char *, size_t n)函數(shù)在比較兩個字符串時,可以比較到字符不同的地方,也可以只比較size_t參數(shù)制定的字符數(shù)。 -
char *strcpy(char *, char *)是將第2個參數(shù)中的字符串內(nèi)容,拷貝到第一個參數(shù)中,一定要先給第1個參數(shù)分配地址空間,不然可能會出現(xiàn)問題,同時strcpy()不會檢查目標(biāo)空間是否能容納源字符串的副本。(一般字符串變量是一個指向字符串的指針,pts2=pts1拷貝的是字符串的地址,而不是字符串的內(nèi)容) -
char *strncpy(char *, char *, size_t),size_t指明可拷貝的最大字符數(shù)。 -
sprintf(char *restrict, const char *restrict, ...)函數(shù)是聲明在stdio.h中,該函數(shù)是將數(shù)據(jù)寫入字符串,第一個參數(shù)是目標(biāo)字符串的地址,其它參數(shù)和printf()相同,即格式字符串和待寫入項的列表。 -
char *strchr(const char * s, int c)如果 s 字符串中含有 c 字符,該函數(shù)返回指向 s 字符串首位置的指針(末尾的空字符也是字符串的一部分,在查找范圍內(nèi));如果在字符串 s 中未找到 c 字符,該函數(shù)則返回空指針。 -
char *strpbrk(const char * s1, const char * s2),如果 s1 字符串中包含 s2 字符串中的任意字符,則該函數(shù)返回指向 s1 字符串首位置的指針,如果在 s1 中未找到任何 s2 字符串中的字符,則返回空字符。 -
char *strrchr(const char * s, int c)函數(shù)返回 s 字符串中 c 字符的最后一次出現(xiàn)的位置(末尾的空字符也是字符串的一部分,在查找范圍內(nèi))。如果未找到 c 字符,則返回空指針。 -
char *strstr(const char * s1, const char * s2)該函數(shù)返回指向 s1 字符串中 s2 字符串出現(xiàn)的首位置。如果在 s1 中沒有找到 s2 ,則返回空字符。