#include <stdio.h>
char *mystrncpy(char *p1, char *p2, int n);
int main(void)
{
char str1[81];
char str2[81];
int n;
do
{
puts("input string1:");
gets(str1);
puts("input string2:");
gets(str2);
puts("input the number of copying char:");
scanf("%d",&n);
getchar();
puts("After copying:");
puts(mystrncpy(str1, str2, n));
puts("input any char except q to go on.");
gets(str1);
}while(*str1 != 'q');
puts("Quit.");
return 0;
}
char *mystrncpy(char *p1, char *p2, int n)
{
char *p=p1;
while(*p1++ != '\0') continue; 这句是什么意思??最后指向第一个空字符吗???
*--p1 = *p2; //*--p1把指针减一再取那里的值,但不是覆盖第一个空字符前的字符???还有的是当while条件不满足时p1还会++吗?
n--; //??下面不是有一个n--吗?这句可以省略吧???
while(n>0 && *p2 != '\0')
{
*++p1 = *++p2;
n--;
}
return p;
}
要求是:strncpy (sl,s2,n)函数从s2复制n个字符给sl,并在必要时截断s2或为其填充额外的空字符。如果s2的长度等于或大于n,目标字符串就没有标志结束的 空字符。函数返回sl。自己编写这个函数,并在一个使用循环语句为这个函数提供输入的完整程序中进行测试。
while(*p1++ != '\0') continue; //
*--p1 = *p2;
请教一下,这句不是太懂,谢谢~。*p1++相当于*(p1++)吧?当它指向第一个第一个空字符时,不满足,跳过循环体continue语句,执行下一句*--p1 = *p2; 是吧?那么为什么会是p1指向'\0'的后一个字节?while(*p1++ != '\0')具体是怎么实现的?
*p1++ 相当于*(p1++) , 语句执行之后,p1虽然向后移了一位,但是在while(*p1++ != '\0')语句中还是以++ 前的值进行比较,所以当while循环结束的时候,p1指向空指针的后一个位置。