C筆記

  • 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 ,則返回空字符。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容