我想知道如果我的代码是正确的。 我需要声明指针数组结构,创建一个新的结构和分配值,并打印出来。 在我看来,我不是正确的声明指针数组。 我需要知道我在做什么错。 谢谢我得到这个编译错误:错误:“人”未申报(第一次在这个函数中使用),而且我试图插入结构数据*列表; 入主但它wouldnt工作
char *book[] = { "x", "y", "z",};
int number[] = { 1, 2, 3};
struct data = { char *bookname; int booknumber;};
function(char *x, int y)
{
static int count;
struct data *list[3];
//creating a new struct
list[count] = (struct data*) malloc( sizeof(struct data) );
//assigning arguments
list->bookname = x;
list->booknumber = y;
count++;
}
int main()
{
struct data *list[3];
int i;
for(i = 0; i < 3; i++)
{
function(book[i], number[i]);
printf("name: %c number: %d", list[i]->bookname, list[i]->booknumber);
}
请更改下面的代码段
// declaring array of pointers to structs //
struct data *list;
//not compiling
//struct data *list[3]; ---> There is no problem with this statement.
//creating a new struct
list = (struct data*) malloc( sizeof(struct data) ); ---> //This statement should compilation error due to declaration of struct data *list[3]
至
struct data *list[100]; //Declare a array of pointer to structures
//allocate memory for each element in the array
list[count] = (struct data*) malloc( sizeof(struct data) );
既然你想数组,你需要声明数组:
char *book[] = { "x", "y", "z",};
int number[] = { 1, 2, 3};
另一个问题是
list = (struct data*) malloc( sizeof(struct data) );
//assigning arguments
list[count]->bookname = ...
在这里, list
总是将有一个元素。 所以,如果count
比其他任何0
,您将访问数组越界!
我想你应该写:
char *book[] = { "x", "y", "z"};
因为在你的情况进行了声明字符数组和使用指针,这实际上是没有意义的填充它。
在上面的代码行,它只是意味着“声明指针数组”。
希望它帮助...
这些事情是错误在你的程序
struct data = { char *bookname; int booknumber;};
“=”应该不应该存在
list = (struct data*) malloc( sizeof(struct data) );
list[count]->bookname = x;
list[count]->booknumber = y;
在这里,你正在创建一个列表的空间,所以你不能做单[统计] - > BOOKNAME,它应该是列表 - > BOOKNAME。 同样的,booknumber
和列表是本地的功能,你不能在主访问它。