簡體   English   中英

從指針打印數組,只打印第一個元素

[英]Printing arrays from pointers, only the first element prints

我試圖使用返回到第一個元素的指針打印結構數組,然后使用指針算法打印出數組。

我這樣做的方式適用於船舶陣列,但是當我嘗試打印資產數組時,只打印第一個元素,盡管我使用完全相同的技術! 有沒有人知道為什么會這樣?

一個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);
    }

返回assets數組:

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 

assets索引在外部for -loop中遞增。

閱讀完全發生在內部while -loop中, i保持不變。

在每次成功調用fscanf()之后,擺脫for -loop並增加i

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM