第一次尝试
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* myStrncpy(char* destin, const char* source, size_t num) {
if (destin == NULL || source == NULL) {
return NULL;
}
int i = 0;
int j = 0;
for (; i < num; i++) {
if (source[j] == '\0') {
destin[i] = '0';
}
else {
destin[i] = source[i];
j++;
}
}
destin[j] = '\0';
return destin;
}
int main() {
printf("请输入字符串:");
char str1[1024] = { 0 };
scanf("%s", str1);
printf("请输入要拷贝的字符串:");
char str2[1024] = { 0 };
scanf("%s", str2);
printf("输入要拷贝几个字符:");
size_t num = 0;
scanf("%d", &num);
myStrncpy(str1, str2, num);
//strncpy(str1, str2, num);
printf("%s\n", str1);
return 0;
}
模拟实现strncpy
函数:char* (char* destin,const char* source,size_t num);
复制字符串 src 中的内容(字符,数字、汉字…)到字符串 dest 中,复制多少由size_tn
的值决定。
如果 src 的前 n 个字符不含NULL字符,则结果不会以 NULL 字符结束。如果 n < src 的长度,只是将 src 的前 n 个字符复制到 dest 的前 n 个字符,不自动添加\0
,也就是结果 dest 不包括\0
,需要再手动添加一个\0
。如果 src 的长度小于 n 个字节,则以 0 填充 dest 直到复制完 n 个字节。
代码实现很简单,需要注意参数合法性检验。