我有的看起来像这样的数据:拆分字符数组为单独的字符串
header:dataA:dataB
我试图让头和数据A和数据B作为单独的字符串。 所以我写了这个功能,这可能并不好:
void newDataFromBLE(char header[],char dataA[], char dataB[])
{
Serial.println("got:");
Serial.println(header);
Serial.println(dataA);
Serial.println(dataB);
if (strcmp (header,"setWifi") == 0)
//... do stuff here
我来到这里:
#define maxDataSize 50
//.....
char header[20];
char dataA[maxDataSize];
char dataB[maxDataSize];
//**** a call to the function that parse the data
getHeader(BLEcontent,1,header); // here "BLEcontent" has the incoming data
getHeader(BLEcontent,2,dataA);
getHeader(BLEcontent,3,dataB);
//***** call the function that use the data
newDataFromBLE(header,dataA, dataB);
//function that parses the data:
void getHeader(char localString[], int seperatorNum,char *newdata)
{
const char seperator=':';
int counter=0;
int divider=0;
//clear array when it has garbage it added
for(int i = 0; i < maxDataSize; ++i)
newdata[i] = (char)0;
for(int k=0;k<maxDataSize;k++)
{
if (localString[k]== seperator )
{
counter++;
divider=k+1;
if(counter==seperatorNum)
{ return ; }
}
if((seperatorNum-1) ==counter)
newdata[k-divider]=localString[k];
}
return ;
}
当我试图使用功能数据,存储在头/数据A /数据B之后一些非常奇怪的结果。例如,如果传入数据是setWifi:a
,我会得到一个好结果。如果是abcd:abc
我得到垃圾。如果是setWifi:a:b
,我也会得到垃圾。
看来,如果我发送的是不对应于第一个if
声明,它会给我垃圾,即使它在if
之前。看来,它知道(??)即将到来的if
..
它使用前的工作..
您可以用['strtok'](http://stackoverflow.com/questions/3889992/how-does-strtok-split-the-string-into-tokens -in-C)? – Evert
我在你的'Serial.println'线组合C-标签混淆。如果有一些全球性结构'Serial'蒙山一个函数指针'println()一样' – Evert
这将是唯一有效的C。但是,是的,我的想法 - 不要推倒重来,使用'的strtok()',可选输入字符串的副本。 –