所以我有一个名为stationInfo的结构,它有一堆信息,包括纬度,经度和站ID。我编写了一个函数,它将从文件中读取并将值存储到结构数组中。现在,我想将这些结构数组移动到另一个结构数组中。
MapMarker mapInfo[t];
int k;
for(k=0; k < MAX_STATIONS; k++){
mapInfo[k].location.latitude = stationInfo[k].location.latitude;
mapInfo[k].location.longitude = stationInfo[k].location.longitude;
char* stationName = getStationName(stationInfo[k].stationID);
strcpy(mapInfo[k].markerName, stationName);
}
但是,这打破了我的计划。我该如何解决这个问题?
编辑:根据Paddy的要求:
mapMarker Struct:
typedef struct{
GeographicPoint location;
char markerName[100];
char markerText[1000];
int type;
} MapMarker;
GeographicPoint位置分为纬度和逻辑结构。
char* getStationName(int stationID){
if (stationID < 0 || stationID >= MAX_STATIONS || !AllStationNames[stationID])
return "Unknown";
return AllStationNames[stationID];
} /* getStationName */
和数组
char *AllStationNames[MAX_STATIONS] = {
[1] = "Ian Stewart Complex/Mt. Douglas High School",
[3] = "Strawberry Vale Elementary School",
...
[197] = "RASC Victoria Centre",
[199] = "Trial Island Lightstation",
[200] = "Longacre",
};
答案 0 :(得分:1)
如评论中所述,您使用变量t
作为大小声明VLA(可变长度数组)。这总是小于或等于MAX_STATIONS
。所以你有一个缓冲区溢出问题。
MapMarker mapInfo[t];
int k;
for(k=0; k < MAX_STATIONS; k++){
// Accessing mapInfo[k] when k >= t will have undefined behaviour
}
最简单的解决方案是将mapInfo
设为常量并循环到t
:
MapMarker mapInfo[MAX_STATIONS];
for( k = 0; k < t; k++ ) ...