我对此功能有两个问题:
char * getHeader( char localString[], int seperatorNum)
{
int maxL=50;
const char seperator=':';
char newdata[maxL];
int counter=0;
for(int k=0;k<maxL;k++)
{
if ( localString[k]== seperator )
{
counter++;
if(counter==seperatorNum)
{ Serial.println(newdata); return newdata; }
}
newdata[k]=localString[k];
}
}
newdata
时,我得到了垃圾,但localString[k]
显示效果不错。编辑:我在每个结果后得到bb。所以:
aaa:sss (send)
aaabb (get)
kkk:ooo (send)
kkkbb (get)
ppp:ttt
pppbb
答案 0 :(得分:1)
newdata[k]=localstring[k];
如果应该在
之后for(int k=0;k<maxL;k++)
{
//here
如果不能解决问题,请提供相关的完整信息 代码。
答案 1 :(得分:0)
char * getHeader( char localString[], int seperatorNum)
{
int maxL=50;
const char seperator=':';
char newdata[maxL];
memset(newdata, '\0', maxL);///////
int counter=0;
int i = 0; ///////
for(int k=0;k<maxL;k++)
{
if ( localString[k] == seperator )
{
counter++;
if(counter == seperatorNum)
{
Serial.println(newdata);
return newdata;
}
}else{
newdata[i] = localString[k];//outside the else this was alway executed. I assume you didn't want the seperator in this
i++;
}
}
}
答案 2 :(得分:0)
清除数组,其中会有一些值,这样可以解决这个问题,这是因为当你打印它时,还有一些其他值,你也可以打印它们
for( int i = 0; i < maxL; ++i )
newdata[i] = (char)0;
彻底解决。
编辑: 对于任何需要的人来说,这是完整的功能:
char * getHeader( char localString[], int seperatorNum)
{
int maxL=50;
const char seperator=':';
char newdata[maxL];
int counter=0;
int divider=0;
//clear array when it has garbage it added
for( int i = 0; i < maxL; ++i )
newdata[i] = (char)0;
for(int k=0;k<maxL;k++)
{
if ( localString[k]== seperator )
{
counter++;
divider=k+1;
if(counter==seperatorNum)
{ return newdata; }
}
if( (seperatorNum-1) ==counter)
newdata[k-divider]=localString[k];
}
}