我一直在尝试为大学作业编写一些代码,但是我在编译它时遇到了很多麻烦。我是 C 语言和一般编程方面的乞丐,在发现这些错误方面几乎没有经验。在连续查看了几个小时的代码后,我设法纠正了其中的一些,但有一些非常持久,我无法确定它们。代码如下:
#include<stdio.h>
#include<stdlib.h>
#define ARRAYLENGTH 20
typedef struct{
char *name;
char *type;
char *value;
}variable;
int main(){
char calc[10];
char name1[20];
char name2[20];
int amount, i;
variable *varray;
int var1, var2;
printf("How many variables would you like to create? n");
scanf("%d", amount);
varray = malloc(amount * ARRAYLENGTH * sizeof(variable));
for (i = 0; i < amount; i++){
if (varray[i].name == NULL || varray[i].type == NULL || varray[i].value == NULL){
printf("ERROR: Memory allocation failed. n");
return 1;
}
}
您可能会看到此代码块中未使用的一些声明变量。它们用于程序的后续部分,此处未看到。
我尝试在谷歌上搜索我的问题,并在Stack Overflow上的旧问题中寻找解决方案,但似乎对这些特定错误没有任何效果,因此,我决定问我自己的问题。
任何和所有的帮助将不胜感激。请试着简化一点答案,因为正如我之前提到的,我是一个乞丐。
您是在当前地址上分配"varray"值,而不是地址本身,并且还强制将星号放在错误的位置并且不需要:
varray = malloc(amount * ARRAYLENGTH * sizeof(variable));
发布的代码中的编译错误为:
-
pritnf
应阅读printf
。 - 最后应该有一个
}
。
还有一些严重的逻辑错误:
-
scanf("%d", amount);
应该scanf("%d", &amount)
- 上述内容应具有错误检查,或者应初始化
amount
0
- 在初始化
varray[i].name
之前测试varray[i].name == NULL
。检查分配是否失败的方法是检查malloc
返回的指针是否为 NULL。