从指针打印数组,只打印第一个元素

时间:2013-11-25 20:44:45

标签: c arrays pointers printf

我正在尝试使用返回指向第一个元素的指针打印结构数组,然后使用指针算法打印出数组。

我这样做的方式适用于船舶阵列,但是当我尝试打印资产数组时,只打印第一个元素,尽管我使用完全相同的技术!有没有人知道为什么会这样?

一个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 

1 个答案:

答案 0 :(得分:2)

assets的索引在外for - 循环中递增。

阅读完全发生在内部while - 循环中,i保持不变。

在每次成功调用for后,摆脱i - 循环并增加fscanf()