请教keil 字符串分割程序封装成函数并调用
本帖最后由 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;
unsigned char *buff= buffer;
while((p=strtok(buff,","))!=NULL)
{
i++;
buff=NULL;
}
LCD_write_str(4,0,p);
LCD_write_str(8,0,p);
LCD_write_str(12,0,p);
半途出家,自己瞎模滚打凑出来的函数,但编译不通过,也不知道该如何在main中调用
Split_String(unsigned char *buffer);
{
unsigned char i=0;
unsigned char *p;
unsigned char *buff= buffer;
while((p=strtok(buff,","))!=NULL)
{
i++;
buff=NULL;
}
return p;
} unsigned char *buff= buffer;
buffer应该是Input_String吧! 结尾少了个} 弱弱的问一句:Split_String(unsigned char *buffer);这个是什么书写格式?函数没类型,而且在函数的定义后面竟然有";" 本帖最后由 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);
LCD_write_str(8,0,p);
LCD_write_str(12,0,p);
}
自己封装的函数(不一定对。。。。)
Split_String(unsigned char *buffer)
{
unsigned char i=0;
unsigned char *p;
unsigned char *buff= buffer;
while((p=strtok(buff,","))!=NULL)
{
i++;
buff=NULL;
}
return p;
} 你这个子函数让我纠结不已啊,定义了一个指向数组的指针,但是你在while里面不停的给数组首地址赋值,但是while里面又给i进行自增运算,你这是想实现什么功能呢?另外,你返回的是数组的首地址,也就是说把这个首地址在主函数中赋值给了p,那么*p的值也就是p的值,但是从子函数来看,p里面应该是指针*p的地址,所以,你的主函数一直在接收这个地址,然后在操作这个地址,我凌乱了 本帖最后由 ajfan 于 2013-1-14 19:42 编辑
谢谢毛毛雨,初学阶段,见笑了{:biggrin:}{:biggrin:}{:biggrin:}
我将程序更改了成如下形式
函数
unsigned char *Split_String (unsigned char *Input_String)
{
unsigned char i=0;
unsigned char *p;
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);
目前跑出来的结果为几个大坨坨,程序端应该还有比较多的错误,请各位高手再帮忙扫下盲,谢谢。 发重了,把内容删掉,嘿嘿 char buffer[]="Fred,John,Ann"
char *p;
char *buff = buffer;
while((p=strtok(buf,","))!=NULL) {
i++;
buf=NULL; }如上代码,第一次执行strtok需要以目标字符串的地址为第一参数(buf=buffer),之后strtok需要以NULL为第一参数(buf=NULL)。指针列p[],则储存了分割后的结果,p="John",p="John",p="Ann",而buf就变成 Fred\0John\0Ann\0。
估计是我理解错了,上面是网上有关strtok的用法,输出应该是指针数组(我的理解对么?)如P,而不是单纯的指针p
如果是这样的话我应该在函数里怎么定义才可以让函数返回值为“指针数组”呢?
unsigned char *Split_String (unsigned char *Input_String)
{
unsigned char i=0;
unsigned char *p;
unsigned char *buff= Input_String;
while((p=strtok(buff,","))!=NULL)
{
i++;
buff=NULL;
}
return p; (应该要返回“指针数组”而不是纯指针,这里还有函数头“unsigned char *Split_String” 应该怎么定义???)
}
ajfan 发表于 2013-1-14 21:46 static/image/common/back.gif
char buffer[]="Fred,John,Ann"
char *p;
char *buff = buffer;
那我觉得你也得在主函数中定义相应的指针数组来接收返回值吧,返回p是的写法应该是没错的
页:
[1]