Chinaunix首页 | 论坛 | 博客
  • 博客访问: 532731
  • 博文数量: 150
  • 博客积分: 5010
  • 博客等级: 大校
  • 技术积分: 1861
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-17 00:19
文章分类

全部博文(150)

文章存档

2011年(1)

2009年(14)

2008年(135)

我的朋友

分类: LINUX

2008-10-08 11:25:21

void find_GPGSV(char *message )
{
   char *Gpgsv_position;
   char *Return_position;
   char temp[70];
  
   if(flag_break){
     printf("connect with previous message\n");
     strcat(temp_break, message);
     Gpgsv_position= strstr( temp_break, "$GPGSV");
     flag_break=0;
   }
   else
    {
      Gpgsv_position= strstr( message, "$GPGSV");
    }
   while( Gpgsv_position !=NULL ){
       Return_position= strstr( Gpgsv_position,"\n");
       if(Return_position ){// both $GPGSV "\n" exists

        strncpy(temp, Gpgsv_position, Return_position-Gpgsv_position);
        temp[Return_position-Gpgsv_position]='\0';
        //save_temp(temp);

        printf("find_GPGSV %s\n", temp);
        save_message(temp, strlen(temp));
       }
       else// no "\n" exists

       {
        flag_break=1;
        memset(temp_break,0,240);-----------------此处
        strcpy(temp_break,Gpgsv_position);

        printf("no '\\n' flag_break=1\n");
        printf("save temp_break[] is %s\n", temp_break);
       }
       Gpgsv_position= strstr( Gpgsv_position+1, "$GPGSV");

   }
 
}
 





          memset(temp_break,0,240);
        strcpy(temp_break,Gpgsv_position);

    Gpgsv_position 是来自temp_break,字符串,当memset()后,temp_break清0后,Gpgsv_position所指的字符串也没有了,并没有把Gpgsv_position所指的数据复制temp_break,

所以可以设一个临时数组,把Gpgsv_position的数据放到里面,然后 memset(temp_break,0,240);然后把数组中内容放到里面。
也可以把
memset(temp_break,0,240);注释掉。
这样改后又出现了另一个段错误问题。
这是因为
strncpy(temp, Gpgsv_position, Return_position-Gpgsv_position);
'\n'和'$GPGSV'之间的间隔超过70个以后,就会出现temp数组太小而没放不下复制的数据,从而段错误,可以修改temp数组的大小改正。

阅读(1322) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~