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数组的大小改正。
阅读(1352) | 评论(0) | 转发(0) |