C-strep()返回0和负值

C-strep()返回0和负值,c,gps,strsep,C,Gps,Strsep,我在一个使用GPS数据的项目中工作。 我正试图获取所有数据,但我遇到了很多问题。我得到的结论是: +CGNSINF: <GNSS run status>,<Fix status >,<UTC date & Time>,<Latitude>,<Longitude>,<MSLAltitude>,<SpeedOverGround>, <CourseOverGround>,<FixMode>

我在一个使用GPS数据的项目中工作。 我正试图获取所有数据,但我遇到了很多问题。我得到的结论是:

+CGNSINF: <GNSS run status>,<Fix status >,<UTC date &
Time>,<Latitude>,<Longitude>,<MSLAltitude>,<SpeedOverGround>,
<CourseOverGround>,<FixMode>,<Reserved1>,<HDOP>,<PDOP>,<VDOP>,<Reserved2>,
<GNSSSatellites in View>,<GPS Satellites Used>,
<GLONASS SatellitesUsed>,<Reserved3>,<C/N0 max>,<HPA>,<VPA>

如果你有任何建议,我们欢迎

“strep()返回0和负值”-->不完全正确
strep()
返回一个
char*
。它指向的文本可能是
“-1.234”
。代码从不检查scanf()的返回值,因此不会在代码中备份“纬度为负”的断言。“在我的情况下,纬度为负,使用strep我得到一个0值。”——>发布打印aux_stru gps的示例。知道aux_stru gps是可写的对于strep()非常重要。是吗?欢迎光临。请提供一个完整的例子。另外,请告诉我们您提供了什么输入,以及您得到的
token
值是多少?您是对的,token是正确的,经度也是正确的。问题出在write_gps_log中,但我不明白为什么该值会更改为0。在该函数中,我只执行以下操作:经度b[wr_buff]=(uint32_t)(新经度*1000000);因此,如果我没有错的话,更改为uint32_t不应该将值更改为0“strep()返回0和负值”-->不完全正确
strep()
返回一个
char*
。它指向的文本可能是
“-1.234”
。代码从不检查scanf()的返回值,因此不会在代码中备份“纬度为负”的断言。“在我的情况下,纬度为负,使用strep我得到一个0值。”——>发布打印aux_stru gps的示例。知道aux_stru gps是可写的对于strep()非常重要。是吗?欢迎光临。请提供一个完整的例子。另外,请告诉我们您提供了什么输入,以及您得到的
token
值是多少?您是对的,token是正确的,经度也是正确的。问题出在write_gps_log中,但我不明白为什么该值会更改为0。在该函数中,我只执行以下操作:经度b[wr_buff]=(uint32_t)(新经度*1000000);因此,如果我没有错,更改为uint32\u t不应该将值更改为0

char *string = aux_str_gps;
char *token;
int  counter = 0;

float  gps_date;
float  latitude;
float  longitude;
float  altitude;
float  speed;
float  COG; //course over ground in degrees
float  HDOP;
int    GNSS_sat_used; //numer of GNSS satellites used

while ((token = strsep(&string, ",")) != NULL){
        switch (counter){
        case 2: 
            sscanf(token, "%f", &gps_date);
            write_gps_date(gps_date);
            counter ++;
            break;
        case 3: 
            sscanf(token, "%f", &latitude);
            write_gps_lat(latitude);
            counter ++;
            break;
        case 4: 
            sscanf(token, "%f", &longitude);
            write_gps_long(longitude);
            counter ++;
            break;
        case 5: 
            sscanf(token, "%f", &altitude);
            write_gps_alt(altitude);
            counter ++;
            break;
        case 6: 
            sscanf(token, "%f", &speed);
            write_gps_speed(speed);
            counter ++;
            break;
        case 7: 
            sscanf(token, "%f", &COG);
            write_gps_COG(COG);
            counter ++;
            break;
        case 10: 
            sscanf(token, "%f", &HDOP);
            write_gps_HDOP(HDOP);
            counter ++;
            break;
        case 15: 
            sscanf(token, "%d", &GNSS_sat_used);
            write_gps_GNSS_used(GNSS_sat_used);
            counter ++;
            break;
        default: 
            counter ++;
        }
    }