本文共 2279 字,大约阅读时间需要 7 分钟。
1.模拟实现strncpy
原型:extern char *strncpy(char *dest, char *src, int n);
用法:#include <string.h> 功能:把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。 说明: 如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。 如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。 src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。模拟实现程序如下:
//1.strncpy:#include#include #include char *my_strncpy(char *dst, const char *src,int n){ assert(dst); assert(src); char *cp = dst; //拷贝n个字符,如果n--等于0,说明源代码的长度大于n,这时直接拷贝源代码字符串; //如果n--不等于0,但*src== '\0',说明源代码的长度小于n,这时拷贝源代码字符串,再继续执行下面语句; while (n && (*cp= *src) != '\0') { cp++; src++; n--; } //在目标代码后面追加0,直到n=0; if (n) { while (--n) { *cp++ = '\0'; } } return dst; }int main(){ char str[10] = "abce1234"; char buf[10] = { 0 }; my_strncpy(buf, str,10); printf("%s\n", buf); system("pause"); return 0;}
2.模拟实现strncat
//2.strncat#include#include #include char *my_strncat(char *dst, const char *src,int n){ assert(dst); assert(src); //先打印目标字符串 while (*dst != '\0') { dst++; } //再拷贝源代码指定的的个数 while (n&&(*dst = *src)) { src++; dst++; n--; } return dst;}int main(){ char str[32] = "To Be "; char buf[20] = "or Not To Be"; my_strncat(str, buf,6);//To Be or Not; printf("%s\n", str); system("pause"); return 0;}
//3.strncmp#include#include #include int my_strncmp(char *dst, const char *src,int n){ assert(dst); assert(src); int ret=0; while (!(ret = *(unsigned char *)src - *(unsigned char *)dst) && --n) { ++src; ++dst; } if (ret >0) { return 1; } else if (ret < 0) { return -1; } else { return 0; } return ret;}int main(){ char str[][5] = { "R2D2", "C3P0", "R2A6" }; char buf[10] = { "R2de " }; int i = 0; for (i = 0;i< 3; i++) { if (my_strncmp(str[i], buf, 2) == 0) { printf("%s\n", str[i]);//R2D2 R2A6; } } system("pause"); return 0;}