题目:strncpy(s1,s2,n)函数从s2复制n个字符给s1,并在必要时截断s2或为其填充额外的空字符。如果s2的长度等于或大于n,目标字符串就没有标志结束的空字符。函数返回s1。自己编写这个函数,并在一个使用循环语句为这个函数提供输入的完整程序中进行测试。
代码实现:
/**< strncpy(s1,s2,n)函数从s2复制n个字符给s1,并在必要时截断s2或为其填充额外的空字符。
如果s2的长度等于或大于n,目标字符串就没有标志结束的空字符。函数返回s1。自己编写这个函
数,并在一个使用循环语句为这个函数提供输入的完整程序中进行测试 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 5
char *strncpy1(char *s1, char *s2, int n);
int main()
{
char s1[MAX];
char s2[MAX];
int n;
int len;
printf("输入字符串s1:\n");
gets(s1);
while(*s1 != '\0') //以空行结束测试输入
{
printf("输入字符串s2:\n");printf("输入字符串s1:\n");
gets(s2);
printf("输入要复制到s1字符串末尾的字符个数:\n");
scanf("%d", &n);
getchar();
len = strlen(s1)+n;
if(len < MAX)
{
strncpy1(s1, s2, n);
s1[len] = '\0';
}
else
{
printf("超出s1字符串容量\n");
printf("输入字符串s1:\n");
gets(s1);
continue;
}
printf("输出s1字符串追加%d个字符后的字符串\n", n);
puts(s1);
printf("输入字符串s1:\n");
gets(s1);
}
return 0;
}
char *strncpy1(char *s1, char *s2, int n)
{
int i;
char *begin; //用于存储查找的s1字符串的结束符位置
//查找s1的结束符位置
for(begin=s1; *begin!='\0';begin++) continue;
for(i=0; i<n; i++)
{
if(*s2 != '\0')
{
*begin = *s2;
s2++;
begin++;
}
else
{
*begin = '\0';
}
}
return s1;
}
运行结果: