OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3545|回复: 3

C语言一个字符串插入问题

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-3-9
在线时间
5 小时
发表于 2017-3-9 16:38:11 | 显示全部楼层 |阅读模式
1金钱
请求支援.........................................................
#include <stdio.h>
#include<string.h>
/*
@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[i]='\0';         //结束符
//        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("%s\n",s);
        return 0;
}
预期打印结果应该是a-1b-2c-3d-4f-5-5
我没有想明白为什么strcpy(s,a)的结果是a1b2c3d4f55a-1b-2c-3d-4f-5-5

最佳答案

查看完整内容[请看2#楼]

你仔细看一下.你的S++,加了多少回了.还以为 S会等于STR吗???你想复制的时候 , S已经在STR的屁股上了. 当然不对了.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-3-9 16:38:12 | 显示全部楼层
本帖最后由 操作系统 于 2017-3-9 17:03 编辑

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

使用道具 举报

10

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2017-3-2
在线时间
51 小时
发表于 2017-3-9 18:39:07 | 显示全部楼层

试试这样

本帖最后由 kdo 于 2017-3-9 19:42 编辑

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='\0';         //结束符
     strcpy(s,a);  //使用这条语句会导致打印结果为 a1b2c3d4f55a-1b-2c-3d-4f-5-5
     printf("%s\n",s);
   //    strcpy(str,a);//这条语句为预期打印结果 a-1b-2c-3d-4f-5-5
}
int main(int argc, char *argv[])
{
         char s[10]="a1b2c3d4f55";
         fun(s) ;
       //  printf("%s\n",s);
         return 0;
}
回复

使用道具 举报

10

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2017-3-2
在线时间
51 小时
发表于 2017-3-9 19:44:00 | 显示全部楼层
kdo 发表于 2017-3-9 18:39
void fun(char *str)
{
         char a[10],*s=str;

你把打印放在主函数应该是打印复制前后的吧!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 09:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表