综合技术
直播中

刘建国

7年用户 204经验值
私信 关注
[问答]

为什么strcpy(s,a)的结果是a1b2c3d4f55a-1b-2c-3d-4f-5-5?

请求支援.........................................................
#include
#include
/*
@brief:在字符串中所有数字字符之前加一个'-'字符
*/
void fun(char *str)
{
        char a[100],*s=str;
        int i=0;
        while(*s)
        {
                if('0'<=*s && *s<='9')
                {
                        a[i++]='-';
                        a[i++]=*s++;
                }
                else a[i++]=*s++;
                                       
        }
        a='';         //结束符
//        strcpy(s,a);  //使用这条语句会导致打印结果为 a1b2c3d4f55a-1b-2c-3d-4f-5-5
        strcpy(str,a);//这条语句为预期打印结果 a-1b-2c-3d-4f-5-5
}
int main(int argc, char *argv[])
{
        char s[80]="a1b2c3d4f55";
        fun(s) ;
        printf("%sn",s);
        return 0;
}
预期打印结果应该是a-1b-2c-3d-4f-5-5
我没有想明白为什么strcpy(s,a)的结果是a1b2c3d4f55a-1b-2c-3d-4f-5-5

回帖(3)

杨思

2019-10-24 07:49:49
你仔细看一下.你的S++,加了多少回了.还以为 S会等于STR吗???你想复制的时候  ,   S已经在STR的屁股上了. 当然不对了.
举报

张琛根

2019-10-24 08:04:43
void fun(char *str)
{
         char a[10],*s=str;
         int i=0;
         while(*s)
         {
                 if('0'<=*s && *s<='9')
                 {
                         a[i++]='-';
                         a[i++]=*s++;
                 }
                 else a[i++]=*s++;
                           
         }
         a='';         //结束符
     strcpy(s,a);  //使用这条语句会导致打印结果为 a1b2c3d4f55a-1b-2c-3d-4f-5-5
     printf("%sn",s);
   //    strcpy(str,a);//这条语句为预期打印结果 a-1b-2c-3d-4f-5-5
}
int main(int argc, char *argv[])
{
         char s[10]="a1b2c3d4f55";
         fun(s) ;
       //  printf("%sn",s);
         return 0;
}
举报

姚庭芳

2019-10-24 08:18:48
你把打印放在主函数应该是打印复制前后的吧!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分