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

标签 c arrays pointers printf

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

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

仅供引用: Assets 数组已正确填充,如果我在填充数组的函数中打印出所有值都是正确的。

正在尝试打印数组:

    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 循环中递增。

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

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

关于c - 从指针打印数组,只打印第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20202919/

相关文章:

c - &符号在 C 宏中的应用是什么?

c - 通过 getchar 插入值

c - 仅在第一行写入 csv 文件时矩阵输出错误 [C]

Char 数组可以容纳比预期更多的内容

c++ - 数组和指针

C++方法应该接受指向指针的指针,接收地址并且仍然有效

c - 在 C 中重新分配指向结构的指针数组

c - 用什么代替 gcc/llvm 的 mudflap(用于检测内存访问错误)?

c - getchar() 不传递 EOF 并且 Ctrl+Z 不终止 Cygwin 上的程序

c++ - 需要移动双端队列中的元素。代码不工作