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

时间:2015-04-29 01:07:34

标签: c

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

您可能会看到一些未在此代码块中使用的声明变量。它们用于以后未见过的程序中。

我已经尝试使用Google搜索我的问题,并在Stack Overflow上搜索旧问题的解决方案,但似乎没有任何效果可用于这些特定错误,因此,我决定提出自己的问题。

任何和所有帮助都会非常感激。请尽量简化答案,因为正如我之前提到的,我是一名初学者。

2 个答案:

答案 0 :(得分:2)

您正在分配&#34; varray&#34;在当前地址的价值,而不是地址本身,也铸造了明星在错误的地方,并且是不需要的:

varray = malloc(amount * ARRAYLENGTH * sizeof(variable));

答案 1 :(得分:0)

您发布的代码中的编译错误是:

  • pritnf应阅读printf
  • 最后应该有一个}

还有一些严重的逻辑错误:

  • scanf("%d", amount);应为scanf("%d", &amount)
  • 上述内容应进行错误检查,或amount应初始化为0
  • 在初始化varray[i].name == NULL之前测试varray[i].name。检查分配失败的方法是检查malloc返回的指针是否为NULL。