c语言 将形参s所指字符串 放入形参a所指字符数组中,使a中存放同样的字符串。

2025-04-13 12:20:41
推荐回答(5个)
回答(1):

你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; i        a[i]=p[i];
    }
    a[i]='\0';
}

当然如果其它地方不动,将原本的a[i]=s[i]改为a[i]=(s-j)[i]也是可以的

回答(2):

修改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;ia[i]='\0';}

回答(3):

fun里面,你s++的时候s的头地址就改变了

你要想数s的长度,可以把while部分变为

while(*(s+j))	{	
j++;
}

或者在while结束后,再用for循环让s--,让它恢复到原来的地址

回答(4):

void fun(char *a, char *s)
{
    while(*s!='\0')
    {
        *a=*s;
        a++;
        s++;
    }
    *a='\0';
}

回答(5):

哪里不对了,结果不是跟s2一毛一样么