C語言-字符串函數的實現(三)之strcat


C語言中的字符串函數有如下這些

  • 獲取字符串長度
    • strlen
  • 長度不受限制的字符串函數
    • strcpy
    • strcat
    • strcmp
  • 長度受限制的字符串函數
    • strncpy
    • strncat
    • strncmp
  • 字符串查找
    • strstr
    • strtok
  • 錯誤信息報告
    • strerror

長度不受限制的字符串函數

strcat

老規矩,我們還是看看文檔是怎樣說的,如下

strcat文檔

char * strcat ( char * destination, const char * source );

Concatenate strings

連接字符串

Appends a copy of the source string to the destination string. The terminating null character in destination is overwritten by the first character of source, and a null-character is included at the end of the new string formed by the concatenation of both in destination.

追加一個源字符串的拷貝到目的字符串中。在目的字符串中的'\0'會被源字符串的第一個字符重寫,然后'\0'會在新字符串的最后面。

destination and source shall not overlap.

目的字符串和源字符串不應該重疊

可以知道

  1. 源字符串必須以 '\0' 結束。
  2. 雖然文檔沒說目標空間必須足夠大,但是想一想還是可以知道的,即目標空間必須有足夠大,能容納下源字符串的內容,不然就追加不上了

實現

斷言指針不為空是個好習慣~

char* my_strcat(char* dest, const char* src) 
{
    assert(dest != NULL);
    assert(src);
    char* rest = dest;
    // 1. 找到目的字符串的'\0'
    while (*dest != '\0') 
    {
    	dest++;
    }
    // 2. 追加,就是字符串拷貝了,和之前的strcpy的實現一樣
    while (*dest++ = *src++) 
    {
        ;
    }
    return rest;
}

int main() 
{
    //char arr1[] = "hello";
    //char arr2[] = "world";

    //// 把arr2追加到arr1上
    //strcat(arr1, arr2);
    //printf("%s\n", arr1);
    // 會報錯,空間不夠,上面的寫法是錯誤的
    // 可以給arr1的大小固定一個大的空間,比如arr1[30]
    char arr1[30] = "hello\0xxxxxxxxx";
    char arr2[] = "world";

    // 把arr2追加到arr1上
    //strcat(arr1, arr2);
    my_strcat(arr1, arr2);
    printf("%s\n", arr1);
    return 0;
}

總的來說,實現的思路就是,把源字符串追加到目的字符串的后面,從而實現字符串連接。問題就在於如何找到目的字符串的尾部,很簡單,就直接找'\0',找到'\0'就進行追加,追加就是直接復制源字符到目的空間,以此循環,復制直到遇到'\0'就結束,這樣就完成了字符串的連接了。

最后,謝謝你看到這里,謝謝你認真對待我的努力,希望這篇博客有幫到你

你輕輕一個贊,就是我世界里的一顆星

還有因本人水平有限,如有錯誤以及不足之處,歡迎靚仔靚女們指出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM