使用 memcpy 函数 C++ 复制 char 数组
copying char array using memcpy function C++
我正在解析 char 数组中的 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);
你将9个个字符复制到8个[的数组中=31=] 个元素(假设 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: %s\n", latitude);
printf("long: %s\n", longitude);
}
我正在解析 char 数组中的 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);
你将9个个字符复制到8个[的数组中=31=] 个元素(假设 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: %s\n", latitude);
printf("long: %s\n", longitude);
}