strcat和strncat
Posted zsQgqdsd1002
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了strcat和strncat相关的知识,希望对你有一定的参考价值。
strcat
我们依旧先看一下strcat函数在msdn中的解释:
The strcat function appends strSource to strDestination and terminates the resulting string with a null character. The initial character of strSource overwrites the terminating null character of strDestination. No overflow checking is performed when strings are copied or appended. The behavior of strcat is undefined if the source and destination strings overlap.
strcat函数将strSource追加到strDestination,并用空字符终止结果字符串。strSource的初始字符覆盖strDestination的终止空字符。复制或追加字符串时不执行溢出检查。如果源字符串和目标字符串重叠,strcat的行为是未定义的。
这里需要注意以下几点:
1.源字符串必须以'\\0'结尾
2.目标空间需要足够的大,使其可以容纳原字符串的内容
3.目标空间必须是可修改的
4.如果源字符串中没有'/0',那么复制的结果是未定义的,由于strncat不会执行溢出检查,所以并不会报错,但是程序可能会崩溃
5.如果源字符串和目标字符串重叠的话,strcat的行为是未定义的,也就是不具有实际价值
那么知道了这些,下面我们自己来试着动手实现一下strcat函数:
char* MyStrcat(char* dst, const char* src)
char* p = dst;
assert(dst && src);
while (*dst != '\\0')
dst++;
while (*dst++ = * src++);
return p;
int main()
char arr[20] = "abcdef";
const char* arr1 = "ghijk";
char* ret = MyStrcat(arr, arr1);
printf("%s", ret);
return 0;
我们来看一下程序的运行结果:
非常的完美
二、strncat
同样的我们来看一下其定义:
The strncat function appends, at most, the first count characters of strSource to strDest. The initial character of strSource overwrites the terminating null character of strDest. If a null character appears in strSource before count characters are appended, strncat appends all characters from strSource, up to the null character. If count is greater than the length of strSource, the length of strSource is used in place of count. The resulting string is terminated with a null character. If copying takes place between strings that overlap, the behavior is undefined.
strncat函数最多将strSource的第一个count字符追加到strDest。strSource的初始字符覆盖strDest的终止空字符。如果在追加count个字符之前strSource中出现空字符,strncat将追加strSource中的所有字符,直至空字符。如果count大于strSource的长度,则使用strSource的长度代替count。结果字符串以空字符终止。如果复制发生在重叠的字符串之间,则行为未定义。
这里我们还有几点需要注意:
1.strncat中的n须是一个大于零的整数
2.源字符串的首字符会覆盖目标字符串的'\\0'
3.如果n大于源字符串长度,则用源字符串长度替代n
我们来实现一下:
char* MyStrcat(char* dst, const char* src, int count)
char* p = dst;
assert(dst && src);
while (*dst != '\\0')
dst++;
for (int i = 0; i < count; i++)
*dst = *src;
dst++;
src++;
*(dst + 1) = '\\0';
return p;
int main()
char arr[20] = "abcdef";
const char* arr1 = "ghijk";
char* ret = MyStrcat(arr, arr1, 3);
printf("%s", ret);
return 0;
我们来看一下程序的输出结果:
非常的完美
以上就是我今天想分享给大家的内容,如果有错误的或者可以改进的地方,欢迎大佬联系我。
以上是关于strcat和strncat的主要内容,如果未能解决你的问题,请参考以下文章