strcat是C語言的函式之一,來自C語言標準函式庫,定義於string.h,它可以把第二個參數的字串附加到第一個參數之後。所以第一個參數必須保留足夠的空間作為串接時使用。
本文以C++實作執行。
strcat 和 strncat 的函數原型如下:
char *strcat(char* s1, const char* s2);
char *strncat(char* s1, const char* s2,size_t n);
strcat 中,第一個參數s1指的是要被附加在後面的字串,第二個參數s2指的是要附加的字串
原文定義: Appends the string s2 to s1. The first character of s2 overwrites the terminating null character of s1. The value of s1 is returned.
strncat 中,第一個參數s1指的是要被附加在後面的字串,第二個參數s2指的是要附加的字串,第三個參數n指的是要附加多少個s2字串中的字元到s1中
原文定義: Appends at most n characters of string s2 to string s1. The first character of s2 overwrites the terminating null character of s1. The value of s1 is returned.
strcat 與 strncat 的實作程式碼如下:
char *strcat_implementation(char *s1, const char *s2)
{
char *save = s1;
while (*save != 0)
{
save++;//記住s1的最後一個位置
}
for (; *s2 != '\0'; save++, s2++)
{
*save = *s2;//s1最後一個位置的下一個位置開始append s2的值
}
*save = '\0';//save的第1個為null的空間 = '\0' 在這空間之後還是null
return(save);
}
char *strncat_implementation(char* s1, const char* s2, int n)
{
char *save = s1;
while (*save != 0)
{
save++;//記住s1的最後一個位置
}
for (int count = 0; (*s2 != '\0') && (n>count); save++, s2++, count++)
{
*save = *s2;//s1最後一個位置的下一個位置開始append s2的值
}
*save = '\0';//save的第1個為null的空間 = '\0' 在這空間之後還是null
return(save);
}
完整程式碼如下:
#include <iostream>
using namespace std;
char *strcat_implementation(char *, const char*);
char *strncat_implementation(char *, const char*, int);
int main() {
char s1[30] = "Hello ";
char s2[] = "beautiful girl ";
char s3[60]="";//如果沒有 ="" 的話 在記憶最後一個位置的時候 會記憶到 s3[59],之後附加的字串就會超過s3[60]的陣列 會噴錯誤
cout << "s1 = " << s1 << endl;
cout << "s2 = " << s2 << endl;
cout << endl;
strcat_implementation(s1, s2);
cout << "After strcat(s1,s2):\ns1 = " << s1 << "\ns2 = " << s2<<endl;
cout << endl;
strncat_implementation(s3, s1,6);
cout << "After strncat(s3,s1,6):\ns3 = " << s3 << "\ns1 = " << s1<<endl;
cout << endl;
strcat_implementation(s3, s1);
cout << "After strcat(s3,s1):\ns3 = " << s3 << "\ns1 = " << s1 << endl;
cout << endl;
system("pause");
return 0;
}
char *strcat_implementation(char *s1, const char *s2)
{
while (*s1 != '\0')
{
s1++;//記住s1的最後一個位置
}
for (; *s2 != '\0'; s1++, s2++)
{
*s1 = *s2;//s1最後一個位置的下一個位置開始append s2的值
}
*s1 = '\0';//save的第1個為null的空間 = '\0' 在這空間之後還是null
return(s1);
}
char *strncat_implementation(char* s1, const char* s2, int n)
{
//char *save = s1;
while (*s1 != NULL)
{
s1++;//記住s1的最後一個位置
}
for (int count = 0; (*s2 != '\0') && (n>count); s1++, s2++, count++)
{
*s1 = *s2;//s1最後一個位置的下一個位置開始append s2的值
}
*s1 = '\0';//save的第1個為null的空間 = '\0' 在這空間之後還是null
return(s1);
}
實際執行結果如下:
有夢最美 築夢踏實
活在當下 認真過每一天
我是阿夢 也是Ace