我正在制作一个程序,将一些数据输入到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];
}
}
答案 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