0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

C語言string.h中的庫函數(shù)有哪些?

冬至子 ? 來源:小李的創(chuàng)客實驗室 ? 作者:初出茅廬的小李 ? 2023-07-08 16:38 ? 次閱讀

C語言字符數(shù)組與字符串數(shù)組

在C語言中,字符數(shù)組字符串數(shù)組實際上是同一種類型。字符串是由字符組成的字符數(shù)組,通常以空字符 '\\0' 結尾。C語言中的字符串是一種常見的數(shù)據(jù)類型。我們可以通過兩種方式定義字符數(shù)組跟字符串數(shù)組

char charArray[10];               // 定義一個包含10個字符的字符數(shù)組
char strArray[10] = "Hello";      // 定義并初始化一個字符串數(shù)組

常用函數(shù)之strlen()函數(shù)

strlen 是 C 語言中的一個字符串函數(shù),用于計算字符串的長度,即字符串中字符的個數(shù)(注意它是不包括結尾的空字符 '\\0')。

函數(shù)原型如下:

size_t strlen(const char *str);

參數(shù) str 是一個指向以空字符 '\\0' 結尾的字符串的指針。函數(shù)返回一個 size_t 類型的值,表示字符串的長度。

以下是一個使用 strlen 函數(shù)的示例代碼:

#include < stdio.h >
#include < string.h >

int main(void) 
{
    char str[] = "Hello, World!";
    size_t length = strlen(str);
    printf("Length of the string: %zu\\n", length);
    return0;
}

在上述示例中,我們定義了一個字符串 str,并使用 strlen 函數(shù)計算字符串的長度,將結果保存在變量 length 中。最后,使用 printf 函數(shù)打印字符串的長度。

輸出結果為:

Length of the string: 13

注意,strlen 函數(shù)返回的長度不包括結尾的空字符 '\\0'。所以對于上述示例中的字符串 "Hello, World!",雖然實際占用的字符數(shù)為 13,但 strlen 函數(shù)返回的結果是 13,而不是 14。這是因為 C 語言中的字符串以空字符 '\\0' 結尾,作為字符串的結束標志。

5個字母+1個逗號 + 1個空格 + 5個字母+1個感嘆號 = 13個字節(jié)

常用函數(shù)之strcpy()函數(shù)

strcpy 是 C 語言中的一個字符串函數(shù),用于將一個字符串復制到另一個字符串中。

函數(shù)原型如下:

char *strcpy(char *dest, const char *src);

參數(shù) dest 是目標字符串的指針,src 是源字符串的指針。函數(shù)將源字符串的內(nèi)容復制到目標字符串中,并返回指向目標字符串的指針。//后面的字符串被復制到前面的那個字符串 并返回指向的目標字符串指針

以下是一個使用 strcpy 函數(shù)的示例代碼:

#include < stdio.h >
#include < string.h >

int main(void)
{
    char src[] = "Hello";
    char dest[10];
    strcpy(dest, src);
    printf("Copied string: %s\\n", dest);
    return0;
}

在上述示例中,我們定義了一個源字符串 src,內(nèi)容為 "Hello",以及一個目標字符串 dest,大小為 10。使用 strcpy 函數(shù)將源字符串的內(nèi)容復制到目標字符串中。最后,使用 printf 函數(shù)打印目標字符串的內(nèi)容。

輸出結果為:

Copied string: Hello

注意,在使用 strcpy 函數(shù)時,需要確保目標字符串的緩沖區(qū)足夠大以容納源字符串的內(nèi)容。否則,可能會導致緩沖區(qū)溢出的錯誤。此外,確保源字符串以空字符 '\\0' 結尾,以便 strcpy 函數(shù)正確復制整個字符串。

常用函數(shù)之strcmp()函數(shù)

strcmp 是 C 語言中的一個字符串函數(shù),用于比較兩個字符串是否相等。

函數(shù)原型如下:

int strcmp(const char *str1, const char *str2);

參數(shù) str1str2 是兩個要比較的字符串的指針。函數(shù)返回一個整數(shù)值,表示比較結果的大小關系:

  • 如果 str1str2 相等,則返回 0。
  • 如果 str1 按字典順序小于 str2,則返回負數(shù)。
  • 如果 str1 按字典順序大于 str2,則返回正數(shù)。

什么是按照字典排序呢?

按字典順序是一種基于字母字符的比較方式,類似于字典中單詞的排列順序。在 C 語言中,字符串的比較操作是按照字典順序進行的。

字典順序比較的規(guī)則如下:

  1. 比較字符串中對應位置的第一個字符。
  2. 如果兩個字符不相等,那么根據(jù)它們的 ASCII 值來確定它們的大小關系。較小的字符被認為是在字典中 較早的位置 ,較大的字符被認為是在字典中 較后的位置 。
  3. 如果兩個字符相等,則繼續(xù)比較下一個字符,直到找到不相等的字符或遇到字符串的結尾(即遇到空字符 '\\0')。
  4. 如果其中一個字符串到達結尾而另一個字符串還有剩余字符,則被認為到達結尾的字符串較小。

以下是一些示例,幫助理解按字典順序比較字符串的結果:

  • "apple" 按字典順序小于 "banana",因為 'a' 比 'b' 小。ASCII碼值小
  • "cat" 按字典順序大于 "dog",因為 'c' 比 'd' 大。
  • "hello" 按字典順序等于 "hello",因為每個對應位置的字符都相等。
  • "open" 按字典順序大于 "office",因為在第一個字符 'o' 相等的情況下,第二個字符 'p' 比 'f' 大。

需要注意的是,字母的大小比較是基于其對應的 ASCII 值進行的。在 ASCII 編碼中,小寫字母的 ASCII 值比大寫字母的 ASCII 值大*。因此,在按字典順序比較字符串時,大寫字母會被認為是在相應小寫字母之前。*

理解按字典順序比較字符串的概念對于正確使用字符串比較函數(shù)(如 strcmp)以及處理字符串排序等操作非常重要。

以下是一個使用 strcmp 函數(shù)的示例代碼:

#include < stdio.h >
#include < string.h >

int main(void) 
{
    char str1[] = "Hello";
    char str2[] = "World";

    int result = strcmp(str1, str2);

    if (result == 0) 
    {
        printf("Strings are equal.\\n");
    } 
    elseif (result < 0) 
    {
        printf("str1 is less than str2.\\n");
    } 
    else
    {
        printf("str1 is greater than str2.\\n");
    }

    return0;
}

在上述示例中,我們定義了兩個字符串 str1str2,分別賦值為 "Hello" 和 "World"。使用 strcmp 函數(shù)比較這兩個字符串,并將結果保存在變量 result 中。然后根據(jù)比較結果打印相應的消息。

輸出結果為:

str1 is less than str2.

在此示例中,由于 "Hello" 按字典順序小于 "World",所以 strcmp 函數(shù)返回一個負數(shù)值,表明 str1 小于 str2。根據(jù)返回的結果,我們輸出了相應的消息。

需要注意的是,strcmp 函數(shù)是區(qū)分大小寫的。如果要執(zhí)行不區(qū)分大小寫的字符串比較,可以使用 strcasecmp 函數(shù)(在一些編譯器中可能稱為 _stricmp)。

這是在dev的string.h一段代碼 它支持strcasecmp 以及_stricmp
#ifndef __CRT__NO_INLINE
  __CRT_INLINE int __cdecl strncasecmp (const char *__sz1, const char *__sz2, size_t __sizeMaxCompare) { return _strnicmp (__sz1, __sz2, __sizeMaxCompare); }
  __CRT_INLINE int __cdecl strcasecmp (const char *__sz1, const char *__sz2) { return _stricmp (__sz1, __sz2); }
#else
#define strncasecmp _strnicmp
#define strcasecmp _stricmp
#endif /* !__CRT__NO_INLINE */

常用函數(shù)之strcat()函數(shù)

strcat 是 C 語言中的一個字符串函數(shù),用于將一個字符串連接到另一個字符串的末尾。

函數(shù)原型如下:

char *strcat(char *dest, const char *src);

參數(shù) dest 是目標字符串的指針,src 是源字符串的指針。函數(shù)將源字符串的內(nèi)容連接到目標字符串的末尾,并返回指向目標字符串的指針。

以下是一個使用 strcat 函數(shù)的示例代碼:

#include < stdio.h >
#include < string.h >

int main(void)
{
    char str1[20] = "Hello";
    char str2[] = ", World!";

    strcat(str1, str2);
    printf("Concatenated string: %s\\n", str1);

    return0;
}

在上述示例中,我們定義了一個目標字符串 str1,大小為 20,并初始化為 "Hello"。然后,定義了一個源字符串 str2,內(nèi)容為 ", World!"。使用 strcat 函數(shù)將 str2 連接到 str1 的末尾,修改了 str1 的內(nèi)容。最后,使用 printf 函數(shù)打印連接后的字符串。

輸出結果為:

Concatenated string: Hello, World!

strcat 函數(shù)會將源字符串的內(nèi)容追加到目標字符串的末尾,并確保目標字符串以空字符 '\\0' 結尾。在示例中,str1 原先以空字符結尾,strcat 函數(shù)會將 str2 的內(nèi)容從 str1 結尾處開始拷貝,覆蓋掉 str1 的空字符,并在連接的末尾添加一個新的空字符。

需要注意的是,在使用 strcat 函數(shù)時,確保目標字符串的緩沖區(qū)足夠大,以容納源字符串的內(nèi)容和額外的空字符。否則,可能會導致緩沖區(qū)溢出的錯誤。

類似這樣的函數(shù)還有哪些呢?

除了這幾個常見的字符串函數(shù)外,C 語言還有許多其他常用的字符串函數(shù)。以下是一些高頻使用的字符串函數(shù):

  1. strcat:用于將一個字符串連接到另一個字符串的末尾。
  2. strncat:類似于 strcat,但是可以指定要連接的字符數(shù)。
  3. strcmp:已經(jīng)提到過,用于比較兩個字符串是否相等。
  4. strncmp:類似于 strcmp,但是可以指定要比較的字符數(shù)。
  5. strcpy:已經(jīng)提到過,用于將一個字符串復制到另一個字符串中。
  6. strncpy:類似于 strcpy,但是可以指定要復制的字符數(shù)。
  7. strchr:在字符串中搜索指定字符的第一個出現(xiàn)位置,并返回指向該位置的指針。
  8. strrchr:在字符串中搜索指定字符的最后一個出現(xiàn)位置,并返回指向該位置的指針。
  9. strstr:在字符串中搜索指定子字符串的第一個出現(xiàn)位置,并返回指向該位置的指針。
  10. strtok:將字符串分割成多個子字符串,使用指定的分隔符進行分割。
  11. sprintf:將格式化的數(shù)據(jù)寫入字符串。
  12. sscanf:從字符串中讀取格式化的數(shù)據(jù)。
  13. strlen:已經(jīng)提到過,用于計算字符串的長度。
  14. memset:將指定的值復制到字符串的每個字符。
  15. memcpy:將一個字符串的內(nèi)容復制到另一個字符串。

這些函數(shù)是 C 語言中處理字符串時經(jīng)常使用的函數(shù),它們提供了廣泛的功能,可用于字符串操作、搜索、比較、復制等。了解和熟練使用這些函數(shù)對于處理字符串數(shù)據(jù)非常重要。建議在需要使用特定功能時,查閱相關函數(shù)的文檔并參考示例代碼以確保正確使用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編碼器
    +關注

    關注

    45

    文章

    3647

    瀏覽量

    134701
  • C語言
    +關注

    關注

    180

    文章

    7606

    瀏覽量

    137051
  • ASCII
    +關注

    關注

    5

    文章

    172

    瀏覽量

    35126
收藏 人收藏

    評論

    相關推薦

    string.h 函數(shù)源代碼

    strstr ( )/* -- C語言庫函數(shù)源代碼 - *//* 得到s1第一次包含s2字符串的位置指針。*/#include char * my_strstr(const char
    發(fā)表于 03-26 10:28

    string.h庫和strncmp函數(shù)缺少原型

    \ main.c:278(12)缺少原型 我的include文件中有string.h文件,但我認為這還不夠;],我現(xiàn)在該怎么辦? #rtfm以上來自于谷歌翻譯以下為原文 Hi, I want
    發(fā)表于 01-29 08:35

    string類型數(shù)據(jù)與《string.h》頭文件的區(qū)別在哪里?

    string的含義是什么?string與vector容器的區(qū)別在哪?c的字符串是什么?string類型數(shù)據(jù)與《
    發(fā)表于 07-05 07:18

    string與《string.h哪些區(qū)別

    string與《string.h》的定義何不同?string與《string.h哪些區(qū)別?
    發(fā)表于 10-09 07:22

    string.c里相關函數(shù)介紹

    一、string.c里相關函數(shù)介紹string.h里主要包含了C語言對字符串操作的相關函數(shù),這篇
    發(fā)表于 02-28 09:46

    如何避免rt_int8_t string.h函數(shù)時出現(xiàn)incompatible告警的情況

    rt_int8_t 使用string.h函數(shù)時出現(xiàn)incompatible告警例如:rt_int8_t str[10];rt_sprintf( str, "%05.1lf"
    發(fā)表于 10-18 10:15

    使用標準C語言庫函數(shù)運行有錯誤應當怎么設置?

    我想使用標準 C 語言庫函數(shù),比如 memset 在 string.h 中有定義,可是我直接包含#include , 但是編譯沒錯誤,運行確有錯誤,應當怎么設置?
    發(fā)表于 11-18 14:51

    CodeVisionAVR C語言庫函數(shù)介紹

    CodeVisionAVR C語言庫函數(shù)介紹 目錄:1. Character Type Functions - 字符類型函數(shù)2. Standard
    發(fā)表于 04-22 10:17 ?108次下載

    C語言庫函數(shù)查詢工具

    C語言庫函數(shù)查詢工具
    發(fā)表于 03-11 09:12 ?246次下載

    C語言庫函數(shù)使用大全免費下載

    C語言庫函數(shù)使用大全免費下載 函數(shù)名: abort 功 能: 異常終止一個進程 用 法: void abort(void); 程序例: #include stdio.
    發(fā)表于 11-16 11:53 ?468次下載

    王牌1_C語言標準庫函數(shù)查詢手冊

    很全的C語言庫函數(shù)查詢手冊,對初學者很有用處。
    發(fā)表于 05-18 14:26 ?3次下載

    C語言標準庫函數(shù)

    C語言標準庫函數(shù),使用C語言編程時,常用到的函數(shù)。
    發(fā)表于 05-11 16:41 ?0次下載

    基于C語言標準庫函數(shù)

    基于C語言標準庫函數(shù)
    發(fā)表于 10-23 17:41 ?11次下載
    基于<b class='flag-5'>C</b><b class='flag-5'>語言</b>標準<b class='flag-5'>庫函數(shù)</b>

    請問C語言里strcpy具體怎么使用

    標準庫的string類提供了3個成員函數(shù)來從一個string得到c類型的字符數(shù)組:c_str()、data()、copy(p,n)。這是
    發(fā)表于 11-29 08:54 ?1.1w次閱讀

    單片機 keil c語言字符比較函數(shù)的使用 使用strcmp();

    單片機 keil c語言字符比較函數(shù)的使用 使用strcmp();strcmp()的介紹、32單片機的使用示例注意事項strcmp()的介紹、這是菜鳥教程的介紹:
    發(fā)表于 11-21 15:06 ?17次下載
    單片機 keil  <b class='flag-5'>c</b><b class='flag-5'>語言</b>字符比較<b class='flag-5'>函數(shù)</b>的使用 使用strcmp();