你的代码有几个问题。
首先,你似乎混淆了什么样的数据类型与实际变量的声明。你声明一个struct
,从那开始它就是一个数据类型,很像int
或double
。在给任何东西分配任何东西之前,你需要有一个东西。您可以通过在功能(ALPHA a;
)中定义一个或通过为malloc()
或calloc()
分配一个存储器来获得一个。
要使用calloc()
,你有两个参数,一个是你想要多少个凡是,另一个是什么大小。对于malloc()
,您将两者相乘。另一个区别是malloc()
会返回内存中的任何内容,而calloc()
会将所有内容初始化为零。 (根据标准,这是零长度字符串或整数零,其他值不能保证,但对于大多数现代系统,您将得到相当于零的值)。这些函数返回指向已分配内存的指针。
你似乎想tot
int
S,SO(使用calloc()
),正确的说法是一样的东西int * a = calloc(tot, sizeof(int));
,或int * a = calloc(tot, sizeof(*a));
。C中不需要强制转换(在C++中是必需的,但通常不会在C++中使用malloc()
或calloc()
),它唯一能做的就是掩盖一个可能的错误(不包括#include <stdlib.h>
)。
一旦你有了,你可以参考int
s如a[3]
。
并将结果在ALPHA
的领域是可行的,但你真的需要一个ALPHA
,所以像
ALPHA a;
a.size = calloc(tot, sizeof(*a));
会工作。例如,您会将其称为a.size[3]
。
另外,我没有看到name
正在做什么。这是一个字符,对于任何非空字符串都是不够的,我不知道你为什么在calloc()
调用中得到它。您可能希望name
是动态分配的字符串,其中size
是其大小。在这种情况下,你需要改变线的ALPHA
声明是
int size;
char * name;
和代码可能会是
ALPHA a;
fgets(line, 60, fp);
a.size = atoi(line);
a.name = calloc(a.size, sizeof(*a.name));
一旦你做到了这一点,在进入10后,你可以参考a.name[0]
到a.name[9]
,这就是你的十个字符。 a.name[10]
将是最后一个。请注意,只能在十个字符的数组中放置一个九个字符的字符串,因为您需要为空终止符(即任何C风格字符串的最后一个字符)留出空间。如果您希望能够输入指定数量的字符,则在输入用户输入的号码后,您需要将1加到a.size
。
您可能需要将返回值转换为(ALPHA *)以避免编译器警告。 – Tyler 2010-04-30 14:25:59
这个问题被标记为C.我会被一个C编译器恼怒,它给了我一个警告。 – Secure 2010-04-30 14:33:12
@Tyler,转换malloc()/ calloc()的返回值的唯一原因是与C++兼容。 – 2010-04-30 14:33:14