C将数组的大小传递给另一个c文件变量

时间:2013-11-19 23:39:18

标签: c arrays

这个问题可能是一个非常简单的修复方法,但是我已经从Java背景中获得了新鲜感,所以我觉得C有点令人困惑,有时候我很讨厌。

* 问题概述*

我当前的问题是我有一个数组,其变量大小恰好是文件中的行数。这是一个计算并返回的整数,它变为数组大小(例如文件text.txt有12行,所以数组的大小为12)。

我想知道如何将此值返回到另一个c文件以便在函数中使用,这样我就可以遍历完整的数组。

指出要注意

  1. 在这个赋值中根本不允许任何全局变量,根本没有全局数组/变量。
  2. 行计数功能正常,所以我不会在此处发布
  3. 阵列设置正确并打印正确的结果
  4. 已删除函数中的大部分代码,以便于阅读。
  5. 每个文件都有正确的#includes,我只需要一个如何操作的示例。
  6. 代码:

    void read_from_file() {
     /* reading and parsing removed */
    no_of_lines = (count_lines(locof) - 1); 
    /* locof is a char array storing the file name */
    
    ship ships[no_of_lines];
    
     /* i want to return the value of no_of_lines *?
    

    我想返回no_of_lines的值

    我需要值

    的c文件
     /*This is where i need the variable */
     void asign_mayday_to_ships() {
    
    int* ship_arr_length = SIZE OF SHIP ARRAY NEEDED
    mayday_call* mday_ptr;
    ship* ship_ptr; /* this is a ship array */
    
    mday_ptr = read_mayday_file();
    ship_ptr = read_ship_locations();
    
    int i;
    
    for(i = 0; i < SIZE OF  SHIP ARRAY; i++){
    
    
    }
    

4 个答案:

答案 0 :(得分:1)

只需传递指针和大小,它就是C路。

void read_from_file() {
 /* reading and parsing removed */
no_of_lines = (count_lines(locof) - 1); 
/* locof is a char array storing the file name */

ship ships[no_of_lines];

some_fun_from_second_file(ships, no_of_lines);

答案 1 :(得分:0)

谁打电话给两个部门?难道你不能只返回上部函数中的nr行然后在第二行中传递它吗?如果没有,那么你必须以某种方式将它存储在变量(或结构成员)中,然后你可以在以后获取它。这是一个上下文解决方案,它可能对您不起作用。

答案 2 :(得分:0)

我必须首先malloc我的船只数组,然后根据元素的数量设置malloc的大小,然后我可以返回指针的大小:

ship* ships;
ships = malloc(sizeof (ship) * no_of_lines);

在我遇到问题的功能中:

mayday_call* mday_ptr;
ship* ship_ptr;

mday_ptr = read_mayday_file();
ship_ptr = read_ship_locations();

int arr_size = sizeof (ship_ptr)  ;
int i;
for(i =0; i < arr_size; i++) {
//do something
}

`

答案 3 :(得分:0)

听起来像你的'老师'想要让你使用哨兵价值。即在数组末尾放置一个不存在的对象(例如一个名为all spaces的船)然后在数组处理中你保持循环直到你达到魔法值。

这是一个糟糕的设计,但是如果你不允许全局变量并且你不允许参数我不知道还能做什么