我有的看起來像這樣的數據:拆分字符數組爲單獨的字符串
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()',可選輸入字符串的副本。 –