我正在解析字符数组中的 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: %s\r\n",longitude);
printf("lat: %s\r\n",latitude);
输出:
long: 36.10009-95.925093
lat: -95.925093
所以输出显示的纬度正好是 10 个字节,但是经度太奇怪了,需要一些纬度!有什么解决方案吗?使用memcpy以外的其他函数。
最佳答案
与
memcpy(longitude, position+5, 9);
将九个个字符复制到八个元素数组中(假设按经度
你真正的意思是longitude_1
)。
然后,您将此数组打印为以 null 结尾的字符串,但实际上并未终止它。
所有这些都会导致未定义的行为。
首先,您需要确保数组足够大,可以容纳您复制到其中的字符,加上终止符。然后需要在字符串末尾添加终止符。两者都可以通过增加数组的大小然后在定义时初始化它来完成:
char longitude_1[10] = ""; // 9 characters, plus terminator
// all elements initialized to zero (the string null-terminator
关于c++ - 使用 memcpy 函数复制 char 数组 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59592975/