c++ - 使用 memcpy 函数复制 char 数组 C++

标签 c++ arrays memcpy

我正在解析字符数组中的 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/

相关文章:

arrays - 如何使用filter方法代替for in循环? swift

javascript - 执行名称位于数组中的函数

用 memcpy 复制两个 char* 到 **buff - C 语言

javascript - MongoDB 嵌套查询仅返回最后出现的结果

c - memcpy 混淆溢出/用 gcc 覆盖?

将具有不同类型成员的结构复制到缓冲区

c++ - 使用 LD_PRELOAD 拦截 c++ 类构造函数

c++ - 删除 map 的最后 5 个元素

c++ - 当c++模板定义带有=时是什么意思

c++ - 是什么让boost::shared_mutex如此缓慢