如何为procedure的struct参数赋值?

时间:2015-09-28 04:14:14

标签: c struct

我正在制作一个程序,将一些数据输入到struct数组中。当我尝试将临时结构temp分配给过程的结构参数*daf时,程序始终强制关闭。这是我的代码:

#include <stdio.h>

typedef struct {
  int num;
  char name[50];
  float value;
} Mhs;

typedef Mhs ListMhs[50];
void inputData(int nEf, ListMhs *daf);

int main() {
  ListMhs listmhs;
  inputData(5, &listmhs);
  return 0;
}

void inputData(int nEf, ListMhs *daf) {
  int i;
  ListMhs temp;
  for (i=0; i<nEf; i++) {
    printf("Num: ");
    scanf("%d", &temp[i].num);

    printf("Name: ");
    scanf("%s", &temp[i].name);

    printf("Value: ");
    scanf("%f", &temp[i].value);
  }

  //assign value
  for (i=0; i<nEf; i++) {
    *daf[i] = temp[i];
  }
}

1 个答案:

答案 0 :(得分:3)

您的问题在于*daf[i] = temp[i];

[]的优先级高于*

所以它应该是(*daf)[i] = temp[i];

原始行*daf[i] = temp[i];实际上是*(daf[i]) = temp[i];,并且正在尝试将daf视为ListMhs的数组,并将i元素视为{{1}}然后解除引用它。显然,因为你只是传递一个指向一个ListMhs的指针,一旦我大于0你就会遇到问题。该程序可能在第二次或第三次迭代后尝试写入受保护的内存,这就是它崩溃的原因。如果你有一个附加的调试器,你可能会得到一个更有帮助的错误。

以下是C ++运算符优先级列表:http://en.cppreference.com/w/cpp/language/operator_precedence