打印

请大家帮我看下,在keil下出错,vs2013下没错

[复制链接]
1452|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CCAV18|  楼主 | 2014-7-29 10:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#include <stdlib.h>

typedef struct
{
        int i;
        int d;
} StepMoto;
StepMoto moto[3];
void extract(char *p);
char * extractString(char *p, int i);
void  main()
{
        char c[] = "#3p11234#1p112345#2p112346#s";
        extract(c);
        while(1);
       
}
void extract(char *pn)
{
        while (*pn != 's')
        {
                if (*pn++ == '#')
                {
                        switch (*pn)
                        {
                        case '1':
                                pn = extractString(pn, 0);
                                break;
                        case '2':
                                pn = extractString(pn, 1);
                                break;
                        case '3':
                                pn = extractString(pn, 2);
                                break;
                        default:
                                break;
                        }
                }
        }
}
char * extractString(char *p, int i)
{
        char cp, ch[10];
        int j = 0;
        while (*p != '#')
        {
                ch[j++] = *p++;
        }
        cp = ch[2];
        moto[i].d = atoi(&cp);   //就是这句 转换后就出错。
        moto[i].i = atoi(&ch[3]);
        return p;
}


相关帖子

沙发
dirtwillfly| | 2014-7-29 19:28 | 只看该作者
有啥错误?

使用特权

评论回复
板凳
nethopper| | 2014-7-30 08:38 | 只看该作者
atoi的输入变量是字符串,不是字符,字符串以0结尾,所谓"null terminated", 而字符不需要结尾。松散但灵活的编译器可以认为你的程序对,因为运行时,只要cp的地址后一个地址的数据是零就不会有问题. 但严谨点的编译器会报错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

13

帖子

0

粉丝