1.模拟实现strncpy
char* strncpy(char* destination,const char* source,size_t num);
拷贝num个字符从源字符到目标空间,如果源字符串的长度小于num,则考完源字符串之后,在目标的后边追加0,直到num个。
拷贝num个字符从源字符到目标空间,如果源字符串的长度小于num,则考完源字符串之后,在目标的后边追加0,直到num个。
#include<stdio.h> #include<assert.h> char * my_strncpy(char * dest, const char * src, size_t num) { char* ret = dest; assert(dest != NULL); assert(src != NULL); while (num) { *dest++ = *src++; num--; } if ((*dest - 1) != 0) { *dest = '\0'; } return ret; } int main() { char *p = "bcd"; char q[5]; printf("%s\n", my_strncpy(q, p, 2)); system("pause"); return 0; }
2.模拟实现strncat
char* strncat(char* destination,const char* source,size_t num);
把源字符串的num个字符拼接到目标字符串,在拼接字符串的时候,它会默认给你加上’\0’。
#include<stdio.h> #include<assert.h> char * my_strncat(char * dest, const char * src, size_t num) { assert(dest != NULL); assert(src != NULL); char * ret= dest; while (*dest) { dest++; } while (num) { *dest++ = *src++; num--; } if ((*dest - 1) != 0) { *dest = '\0'; } return ret; } int main() { char *p = "bcd"; char q[20] = {"12345"}; printf("%s\n", my_strncat(q, p, 3)); system("pause"); return 0; }
3.模拟实现strncmp
int strncmp(const char * str1,const char * str2,size_t num);
比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。
int my_strncmp(char * str1, const char * str2, size_t num) { assert(str1 != NULL); assert(str2 != NULL); while (*str1 && *str2&&num--) { if (str1 == str2) { str1++; str2++; } else break; } //return *str1-*str2; if (*str1 == *str2) { return 0; } if (*str1 > *str2) { return 1; } else { return -1; } } int main() { char * p = "nihao"; char * q = "niha"; int ret = my_strncmp(p, q, 3); printf("%d ", ret); system("pause"); return 0; }