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

来源:互联网 发布:新源代源码论坛 编辑:程序博客网 时间:2024/05/17 08:06

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;}




阅读全文
0 0