在char数组中查找逗号

时间:2015-07-04 18:10:33

标签: c

我对此功能有两个问题:

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];
    }
}
  1. 当我打印newdata时,我得到了垃圾,但localString[k]显示效果不错。
  2. 我将如何返回阵列 - 我的方式好吗?
  3. 编辑:我在每个结果后得到bb。所以:

    aaa:sss (send)
    aaabb    (get)
    kkk:ooo  (send)
    kkkbb   (get)
    ppp:ttt
    pppbb
    

3 个答案:

答案 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];

   }


 }