#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
//模拟实现strncat
//char *strncat( char *strDest, const char *strSource, size_t count );
//char* my_strncat(char* str1, const char* str2, size_t count)
//{
// assert(str1 && str2);
// char* pos = str1;
// while (*str1 != '\0')
// {
// str1++;
// }
// while (count != 0 && *str2 != '\0')
// {
// *str1 = *str2;
// str1++;
// str2++;
// count--;
// }
// *str1 = '\0';
// return pos;
//}
char* my_strncat(char* dest, const char* src, int n)
{
char* ret = dest; //将dest首地址储存在ret中,在之后dest++运算中,可以方便找到
assert(dest != NULL && src != NULL); //保证dest、src非空
while (*dest != '\0')//用指针往后一个个找,找到dest结尾的‘\0’
dest++;
while (n && (*dest++ = *src++) != '\0')//把src里的字符一个个放入dest后
//(*dest++ = *src++) 表示先把*src赋给*dest,再把两个指针同时往后移一位(方便下次循环)
n--; //循环跳出条件
*dest = '\0'; //字符追加完成后,再追加’\0’
return ret; //返回dest字符串起始地址
}
int main()
{
char str1[20] = "abcde";
char str2[] = "abcde";
char* ret = my_strncat(str1, str2, 3);
printf("%s\n", ret);
return 0;
}
C#模拟实现strncat
最新推荐文章于 2024-06-20 23:46:18 发布