您的位置:首页 > 其它

模拟实现C库函数:strncpy、strncat和strncmp

2017-11-30 17:40 387 查看
strncat函数是字符串链接函数,将* src字符串中n个字符连接到* dest字符串的有效字符的后面,最后还要加上’\0’

#define _CRT_SECURE_NO_WARNINGS 0
#include <stdio.h>
#include <windows.h>
#include <assert.h>

char *my_strncat(char *dest, const char *src,size_t num)
{
assert(dest);
assert(src);
char *ret = dest;
while (*dest != '\0') //先让dest的指针指向最后
{
*dest++;
}
while (num--)
{
*dest++ = *src++;
}
if (*(dest - 1) != '\0') //判断是否已经将‘\0’复制到目标字符串中
{
*dest = '\0'; //若没有则给目标字符串最后添加‘\0’
}
return ret;
}
int main()
{
char src[] = "world !";
char dest[20] = "hello ";
printf("%s\n", my_strncat(dest, src, 5));
system("pause");
return 0;
}
strncmp函数是字符串比较函数,若* str1的第一个字符的ASCII值大于* str2第一个字符的ASCII值,返回值大于0, 若* str1的第一个

字符的ASCII值小于*str2第一个字符的ASCII值,返回-1, 否则继续比较下一个字符,以此类推,直到遇到第n个字符为止

#define _CRT_SECURE_NO_WARNINGS 0
#include <stdio.h>
#include <windows.h>
#include <assert.h>
int my_strncmp(const char *str1, const char *str2, size_t num)
{
assert(str1);
assert(str2);
while (num--)
{
if (*str1 == *str2)
{
str1++;
str2++;
}
else if ((*str1 - *str2) > 0)
{
return 1;
}
else
{
return -1;
}
}
return 0;
}
int main()
{
char *str1 = "asdfga";
char *str2 = "asdfgh";
int ret = my_strncmp(str1, str2, 6);
printf("%d\n", ret);
system("pause");
return 0;
}
strncpy是将一个字符串的n个字符复制到另一个字符串中,模拟实现strncpy是要注意到字符串的"\0",因为是复制n个字符所以不知道是否将"\0"复制到目标字符串中,所以要在程序中加上给目标字符串附上"\0"

#define _CRT_SECURE_NO_WARNINGS 0
#include <stdio.h>
#include <Windows.h>
#include <assert.h>
char *my_strncpy( char *dest, const char *src, size_t num)
{
assert(dest);
assert(src);
char *ret = dest;
while (num--)
{
*dest++ = *src++;
}
if (*(dest - 1) != '\0') //判断是否已经将‘\0’复制到目标字符串中
{
*dest = '\0'; //若没有则给目标字符串最后添加‘\0’
}
return ret;
}
int main()
{
char *src = "1234adaq552";
char dest[20];
printf("%s\n", my_strncpy(dest, src, 5));
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: