Visual Studio 2013 C 编译语法错误和 C2100 非法间接错误



我一直在尝试为大学作业编写一些代码,但是我在编译它时遇到了很多麻烦。我是 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。

最新更新