字符串函數的實現(三)之strcat
C語言中的字符串函數有如下這些
- 獲取字符串長度
- strlen
- 長度不受限制的字符串函數
- strcpy
- strcat
- strcmp
- 長度受限制的字符串函數
- strncpy
- strncat
- strncmp
- 字符串查找
- strstr
- strtok
- 錯誤信息報告
- strerror
長度不受限制的字符串函數
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.
目的字符串和源字符串不應該重疊
可以知道
- 源字符串必須以
'\0'
結束。 - 雖然文檔沒說目標空間必須足夠大,但是想一想還是可以知道的,即目標空間必須有足夠大,能容納下源字符串的內容,不然就追加不上了
實現
斷言指針不為空是個好習慣~
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'
就結束,這樣就完成了字符串的連接了。