【问题标题】:copying char array using memcpy function C++使用 memcpy 函数 C++ 复制 char 数组
【发布时间】:2020-04-22 20:49:40
【问题描述】:

我正在解析 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 以外的其他功能。

【问题讨论】:

  • 这是 100% C 代码。没有 C++。如果您使用现代 C++ 语言元素,则不会出现越界问题。也许您想将标记从 C++ 更正为 C。

标签: c++ arrays memcpy


【解决方案1】:

memcpy(longitude, position+5, 9);

你将 9 个 个字符复制到 8 个 元素的数组中(假设 longitude 你真的意思是longitude_1)。

然后你将这个数组打印为一个以 null 结尾的字符串,但实际上并没有终止它。

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

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

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

【讨论】:

    【解决方案2】:

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

    #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);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 2012-04-15
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多