使用 memcpy 函数C++复制字符数组



我正在解析字符数组中的 GPS 位置,如下所示:

+CGNSINF: 1,1,20200103230006.000,36.100094,-95.925093,190.100,0.00,113.3,1,,1.1,1.4,0.9,,10,6,,,32,,

我想获取纬度和经度,所以我使用 memcpy 函数从数组中复制它,如下所示:

char latitude[8];
char longitude_1[8];
char s1[] = "+CGNSINF: 1,1,20200103230006.000,36.100094,-95.925093,190.100,0.00,113.3,1,,1.1,1.4,0.9,,10,6,,,32,,";
char* position;
position = strstr(s1,".000");
memcpy(longitude, position+5, 9);
memcpy(latitude, position+15,10);
printf("long: %srn",longitude);
printf("lat: %srn",latitude);

输出:

long: 36.10009-95.925093                                                                                                                                                           
lat: -95.925093 

所以输出显示纬度只有 10 个字节,但经度太奇怪了,它需要一些纬度!,任何解决方案? 使用Memcpy以外的其他功能。

memcpy(longitude, position+5, 9);

您将九个字符复制到一个包含八个元素的数组中(假设您所说的longitude实际上是指longitude_1(。

然后,将此数组打印为以 null 结尾的字符串,但实际上尚未终止它。

所有这些都会导致未定义的行为

首先,您需要确保数组足够大,可以容纳您复制到其中的字符以及终止符。然后,您需要在字符串的末尾添加终止符。两者都可以通过增加数组的大小来完成,然后在定义时对其进行初始化:

char longitude_1[10] = "";  // 9 characters, plus terminator
// all elements initialized to zero (the string null-terminator

尝试这种方法,当需要同一行中的更多字段时,它会有很大帮助:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char latitude[11];
char longitude[11];
char s1[] = "+CGNSINF: 1,1,20200103230006.000,36.100094,-95.925093,190.100,0.00,113.3,1,,1.1,1.4,0.9,,10,6,,,32,,";
char unused[20];
sscanf(s1, "%20[^,],%20[^,],%20[^,],%11[^,],%11[^,],", unused, unused, unused, latitude, longitude);
printf("lat: %sn", latitude);
printf("long: %sn", longitude);
}

最新更新