日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言中常見字符串API詳解

作者:石子君 更新時間: 2022-07-12 編程語言

以下均為筆記,草率見諒,首先介紹下在字符串章節所用的函數,再介紹幾個常見的api


  1. malloc 函數原型:void *malloc(size_t size)
    C庫函數void *malloc(size_t size)分配所需的內存空間,并返回一個指向他的指針

  2. free C庫函數void free(void *ptr)釋放之前調用calloc、malloc或者realloc所分配的內存空間
    作用:1釋放,防止內存泄漏 2防止懸掛指針(野指針的一種)
    普通的變量、數組是在棧上開辟空間,可以自動回收;而malloc在堆上開辟空間,程序結束才會釋放,一般需要free。

  3. realloc 函數原型 void *realloc(void *ptr,size_t szie);
    擴容作用,C庫函數void *realloc(void *ptr,size_t szie)嘗試重新調用之前調用malloc
    或者calloc所分配的ptr所指向的內存塊的大小
    void * realloc(原本的地址,增大的內存);

  4. memset是一個初始化函數,作用是將某一塊內存中的全部設置為指定的值。
    void *memset(void *str, int c, size_t n);
    s指向要填充的內存塊。
    c是要被設置的值。
    n是要被設置該值的字符數。
    返回類型是一個指向存儲區s的指針。

  5. assert 函數原型 void assert( int expression );
    assert 的作用是現計算表達式expression如果其值為假(即為0),
    那么它先向 stderr 打印一條出錯信息,然后通過調用 abort 來終止程序運行。
    使用 assert 的缺點是,頻繁的調用會極大的影響程序的性能,增加額外的開銷。
    在調試結束后,可以通過在包含 #include 的語句之前插入 #define NDEBUG 來禁用 assert 調用

API

  1. 輸出字符串:
  • puts();
  • printf(“%s”,p);
  1. 獲取字符串:
  • scanf(“&s”,p);
  • gets; 函數原型 char * gets(char *str);內存是否合法
    gets這個函數可以無限讀取,容易發生溢出。如果溢出,多出來的字符將被寫入堆棧中
    這就覆蓋了原先的內容,破壞一個或者多個不相關變量的值
  1. 計算長度:

strlen函數
原型:size_t strlen( const char *string );

char arr[20] = “abcdef”;
int len = strlen(arr);
printf(“%d”, len);

注意:
字符串需要以\0作為結尾,strlen函數返回的是在字符串中\0前面出現的字符個數(不包含\0)
參數指向的字符串必須要以\0作為結束
注意函數的返回值類型是size_t類型
更多參考sizeof和strlen你真的清楚了嗎?

  1. 拷貝:
  • strcpy 函數原型char *strcpy(char *dest,comst char *src);
  • strncpy 函數原型 char *strncpy(char *dest,const char *src,int n);
    表示把src所指向的字符串中以src地址開始的前n個字節復制到dest所指的函數數組中,
    并返回被復制后的的dest
  • memcpy函數原型void *memcpy(void *destin, void *source, unsigned n);作用:函數memcpy從source指向的對象中復制n個字符到destin指向的對象中返回值:函數memcpy返回destin的指針。
  1. 拼接:
  • strcat 函數原型 char *strchar(char *dest,const char * src);把src所指向的字符串
    (包括 ’ \0’)復制到dest所指向的字符串后面(刪除dest原來末尾的 ’ \0’),要保證 * dest足夠長
    可以容納被復制進來的 *src,*src中原有的字符不變,返回值指向dest的指針
  1. 比較:
  • strcmp 函數原型 int strcmp(const char*s1,const char *s2);
    若str1 = str2,則返回0;若str1<str2,則返回負數;若str1>str2,則返回正數
  • strncmp 函數原型int strncmp (const char*s1,const char *s2,size_t n);
    功能是把str1和str2比較,最多比較前n個字節,若str1和str2前n個字節相同,返回0;若str1>str2,返回大于0的數
    若str1<str2,返回小于0的數
  1. 查找
  • strchr函數:char * strchr()const char * str, char ch);
    功能:
    找到字符串中的某個字符
    參數:
    str - 要檢索的字符串
    ch - 要尋找的字符
    返回值:
    ch首次出現的位置,如果沒有找到ch返回NULL
  • strstr函數char *strstr(char *str1, const char *str2);
    功能:
    找到字符串中的子串
    參數:
    str1 - 要檢索的字符串
    str2 - 要尋找的子串
    返回值:
    若str2是str1的子串,則返回str2在str1的首次出現的地址;如果str2不是str1的子串,則返回NULL
  1. 分割:
  • 字符串分割strtok函數,char * strtok(char * str, const char * delim);
    功能:
    分解字符串 str 為一組字符串
    參數:
    str - 要分割的字符串
    delim - 分隔符
    返回值:
    從str開頭開始的一個個被分割的串。當沒有被分割的串時則返回NULL。
  1. 轉換大小:
  • 轉為大寫strupr函數
    char *strupr(char *str);
    參數:str //要轉換的字符串
    功能:用于將字符串中字符轉換為大寫
    返回轉換后的小寫字符串,也就是str。
  • 轉為小寫strlwr函數
    char *strlwr(char *str);
    功能等同strupr函數

原文鏈接:https://blog.csdn.net/qq_44333320/article/details/125716294

欄目分類
最近更新