c - 如何使用不能将数组作为参数的函数来填充作为结构一部分的数组

标签 c arrays file struct abstract-data-type

好吧,伙计们,请不要对我刻薄,我只是一个尝试编码的女孩,并且对此感到非常困惑。

我有这个练习来创建一个抽象数据类型,在其中的一部分中,我需要从文件中获取一些值并使用它们创建一行。在文件中,我首先有直线上的点数,然后是每个点的对坐标。 我正在使用的结构是这样的:

    typedef struct ponto{
      double x;
      double y;
       } ponto;

    typedef struct linha{
      double numVertices;
      ponto verticesLin[ ];
       }linha;

我需要使用的函数是这样的:

void criaLinha (linha *, double , ponto *);

所以我编写了这段代码,通过使用该函数将数据从文件转换到 buff,然后转换到 struct linha:

    BuffToLine(ponto buff[], numMax, linha *l){
      double i;
      ponto Aux;
       for(i=0, i<numMax , i++){
           Aux.x = buff[i].x;
           Aux.y = buff[i].y;
        criaLinha(*l, i, *Aux);
                       }
                      }

    void criaLinha (linha *l, double numVertices, ponto *vertices){

       *l.verticesLin[numVertices].x = Aux.x;
       *l.verticesLin[numVertices].y = Aux.y;
                 }

问题是,我不知道如何将文件中的值传递到缓冲区,并且我不确定我编写的代码是否有效,因为我无法测试没有缓冲区的情况。 那么...有人可以帮助我了解如何创建此缓冲区以及是否有更好的方法使用“criaLinha”函数创建线条?

最佳答案

你的代码有很多错误。

第一:

ponto verticesLin[ ];

不是有效的标准 C,gcc 将接受这一点,但如果您希望在结构中包含尾部数组,则正确的声明是:

ponto verticesLin[0];

如果您这样做,那么您需要为该结构分配足够的内存。

第二:

 double i;

不要使用double类型作为数组索引,使用intsize_t

第三:正确缩进代码并为变量指定有意义的名称是一个很好的做法,否则即使您下个月也无法阅读它。

现在,如果您将结构声明为

typedef struct ponto {
    double x;
    double y;
} ponto;

typedef struct linha {
    size_t numVertices; // counters should have an integer type
    ponto verticesLin[0];
} linha;

那么在创建linha实例时需要分配足够的空间。

linha * l = malloc(sizeof(l) + numVertices * sizeof(ponto));

当您传递参数时,您还需要确保类型正确:

void criaLinha (linha * l, size_t numVertices, ponto * vertices);

BuffToLine(ponto buff[], size_t numMax, linha * l) {
    size_t i; // should be an integer type
    ponto Aux;
    for(i=0, i< numMax , i++){
        Aux = buff[i]; // you can copy the whole thing, no need to to it by variable
        criaLinha(
            l // l is already a pointer no need to dereference it
            , i
            , &Aux // Aux is a ponto, you need a ponto*, so you need to take the address of it
        );
    }
}

希望这对您有一点帮助,您没有提供足够的代码来帮助您获得更多帮助。

关于c - 如何使用不能将数组作为参数的函数来填充作为结构一部分的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18560515/

相关文章:

c - MISRA C : 2004 compliant code 的 printf() 替代方案

c - 如何计算数组中相似数字的数量

javascript - 获取另一个数组下的数组名

c - 使用文件结构 c 将数据从一个程序移动到另一个程序

javascript - 在 Chrome 扩展中创建文件

c++ - 指针转换字节顺序

c - 在c中使用gstreamer链接音频和视频bin

c++ - OpenCV : 中缺少三角测量库

php - 删除多维数组中的父键

Bash 逐行读取文本文件并触发 logger 将该行记录到 var/log