你fun中的while执行之后,s指针就已经被移到最后面了,当然不能继续下面的a[i]=s[i],这会导致a中的值是一些无意义的内容,要复制字符串方法很多,比如可以是
void fun( char *a , char *s)
{
while(*s)
*a++=*s++;
*a='\0';
}
或者是
void fun(char *a,char *s)
{
for(;*s!='\0';s++,a++)
*a = *s;
*a = '\0';
}
如果在你原来的基础上改,方法也很多,比如可以这样
void fun( char *a , char *s) {
int i=0,j=0;
char *p=s;
while(*s) {
j++;
s++;
}
for(i=0; ia[i]=p[i];
}
a[i]='\0';
}
当然如果其它地方不动,将原本的a[i]=s[i]改为a[i]=(s-j)[i]也是可以的
修改3处,主要错误是指针要归0。改后如下:
#define N 20
void NONO(){} //函数声明和定义
void fun( char *a , char *s){
int i; // 这句声明放到语句前
int j=0;
while (*s) { j++; s++; }
s=s-j; //指针要归0
for(i=0;i
fun里面,你s++的时候s的头地址就改变了
你要想数s的长度,可以把while部分变为
while(*(s+j)) {
j++;
}
或者在while结束后,再用for循环让s--,让它恢复到原来的地址
void fun(char *a, char *s)
{
while(*s!='\0')
{
*a=*s;
a++;
s++;
}
*a='\0';
}
哪里不对了,结果不是跟s2一毛一样么