我正在尝试使用返回指向第一个元素的指针打印结构数组,然后使用指针算法打印出数组。
我这样做的方式适用于船舶阵列,但是当我尝试打印资产数组时,只打印第一个元素,尽管我使用完全相同的技术!有没有人知道为什么会这样?
一个FYI:资产数组被正确填充,如果我在填充数组的函数中打印出所有值都是正确的。
尝试打印数组:
size_t ship_size;
size_t asset_size;
ship* ship_ptr;
rescue_asset* assets_ptr;
ship_ptr = read_ship_locations(&ship_size);
assets_ptr = read_rescue_assets(&asset_size);
int z;
for (z = 0; z < asset_size; z++)
{
printf("asset %d \t callsign: %s \n", z, (assets_ptr + z)->callsign);
}
返回资产数组:
rescue_asset* read_rescue_assets(size_t* size)
{
no_of_lines = count_lines(locof);
assets = calloc(no_of_lines, sizeof(rescue_asset));
*size = (size_t) no_of_lines;
//fill array
return assets;
}
印刷结果:
asset 0 callsign: Rescue_169
asset 1 callsign:
[and so on ...]
asset 36 callsign:
我认为这是问题所在,它似乎只保存到数组中的第一个元素:
这是我的填充数组函数:
for (i = 0; i < no_of_lines; i++) {
while (fscanf(fp, "%s %c %s %lf %lf %f %u %u", assets[i].callsign,
&assets[i].type, assets[i].base, &assets[i].loc.lat,
&assets[i].loc.lng, &assets[i].speed, &assets[i].max_deploy_time,
&assets[i].service_time) != EOF) {
printf("asset: %d \t callsign: %s \n", i, assets[i].callsign);
}
}
这是此方法的结果:
asset: 0 callsign: Angle_Lifeboat
asset: 0 callsign: Angle_ILB
asset: 0 callsign: Broad_Haven_ILB
[and so on ...]
asset: 0 callsign: Rescue_116
asset: 0 callsign: Rescue_122
asset: 0 callsign: Rescue_169
答案 0 :(得分:2)
assets
的索引在外for
- 循环中递增。
阅读完全发生在内部while
- 循环中,i
保持不变。
在每次成功调用for
后,摆脱i
- 循环并增加fscanf()
。