请教keil 字符串分割程序封装成函数并调用

2020-02-01 16:19发布

本帖最后由 ajfan 于 2013-1-10 10:39 编辑

请教各位大神,下面有一段keil 中字符串分割的程序我目前在main中运行正确,在1602的第4,第8,第12位置能正常显示分割出的"aa" "bb" "cc"字符串
但我想将该部分内容做成函数的性质调用,但一直编译不通过,请帮忙看下指点下迷津,感谢。

在main下编译通过的程序:

unsigned char buffer[]={"aa,bb,cc"};
unsigned char i=0;
unsigned char *p[3];
unsigned char *buff= buffer;

while((p=strtok(buff,","))!=NULL)
    {
     i++;
     buff=NULL;
    }
LCD_write_str(4,0,p[0]);
LCD_write_str(8,0,p[1]);
LCD_write_str(12,0,p[2]);


半途出家,自己瞎模滚打凑出来的函数,但编译不通过,也不知道该如何在main中调用
Split_String(unsigned char *buffer);
{
   unsigned char i=0;
   unsigned char *p[3];
   unsigned char *buff= buffer;
   while((p=strtok(buff,","))!=NULL)
    {
     i++;
     buff=NULL;
    }
   return p;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
xiaodao35
1楼-- · 2020-02-01 19:54
unsigned char *buff= buffer;
buffer应该是Input_String吧!
snoopyzz
2楼-- · 2020-02-01 22:12
结尾少了个}
毛毛雨
3楼-- · 2020-02-01 22:33
 精彩回答 2  元偷偷看……
ajfan
4楼-- · 2020-02-02 01:12
本帖最后由 ajfan 于 2013-1-10 13:15 编辑

这是strtok函数的标准用法,也是网上找的,已经在开发板上验证过是OK的,现在像把这段内容做成函数调用,下面是我自己封装的函数,除去语法的问题,我在main 中该如何调用?
是否应该是这样

unsigned char *p;
unsigned char Input_String[]={"aa,bb,cc"};
main(1)
{
p=Split_String(Input_String);
LCD_write_str(4,0,p[0]);
LCD_write_str(8,0,p[1]);
LCD_write_str(12,0,p[2]);
}




自己封装的函数(不一定对。。。。)
Split_String(unsigned char *buffer)
{
   unsigned char i=0;
   unsigned char *p[3];
   unsigned char *buff= buffer;
   while((p=strtok(buff,","))!=NULL)
    {
     i++;
     buff=NULL;
    }
   return p;
}
毛毛雨
5楼-- · 2020-02-02 01:45
你这个子函数让我纠结不已啊,定义了一个指向数组的指针,但是你在while里面不停的给数组首地址赋值,但是while里面又给i进行自增运算,你这是想实现什么功能呢?另外,你返回的是数组的首地址,也就是说把这个首地址在主函数中赋值给了p,那么*p的值也就是p[0]的值,但是从子函数来看,p[0]里面应该是指针*p[0]的地址,所以,你的主函数一直在接收这个地址,然后在操作这个地址,我凌乱了
ajfan
6楼-- · 2020-02-02 07:33
本帖最后由 ajfan 于 2013-1-14 19:42 编辑

谢谢毛毛雨,初学阶段,见笑了

我将程序更改了成如下形式

函数
unsigned char *Split_String (unsigned char *Input_String)
{
   unsigned char i=0;
   unsigned char *p[3];
   unsigned char *buff= Input_String;
   while((p=strtok(buff,","))!=NULL)
    {
     i++;
     buff=NULL;
    }
   return p;
}


main内该部分函数(其他LCD及初始化部分省略掉了)

unsigned char *t;
unsigned char buffer[]={"aa,bb,cc"};

  t=Split_String(buffer);
  LCD_write_str(4,0,t+0);
  LCD_write_str(8,0,t+1);
  LCD_write_str(12,0,t+2);

目前跑出来的结果为几个大坨坨,程序端应该还有比较多的错误,请各位高手再帮忙扫下盲,谢谢。

一周热门 更多>