我是这个网站的新手,对编程很新。
我试图声明一个结构数组,然后能够在函数调用中初始化它。然后能够在Main中使用不同的值重新初始化它,并且还能够调用该函数来加载不同的值。我收到了一些需要帮助的编译错误。
我的代码:
#include <stdio.h>
#define MAX_NAMES 5
typedef struct name // Struct template
{
int int_value;
char *string_value;
}Name;
void init_struct(struct name SETTINGS); // Function prototype
int main()
{
int i;
Name settings[MAX_NAMES];
for(i=0; i<=MAX_NAMES; i++) // Initializes struct
{
settings[i] = {1, "Test"};
}
printf("Before function call:\n-------------\n");
for (i=0; i < MAX_NAMES; i++) // Prints struct
printf("%i : int_value = %i, string_value = %s\n",
i, settings[i].int_value, settings[i].string_value);
init_struct(settings[MAX_NAMES]); // Calls function to reinitalize struct
printf("\n\nAfter function call:\n-------------\n");
for (i=0; i < MAX_NAMES; i++) // Prints struct
printf("%i : int_value = %i, string_value = %s\n",
i, settings[i].int_value, settings[i].string_value);
return 0;
}
void init_struct(struct name SETTINGS)
{
int i;
for(i=0; i<=MAX_NAMES; i++) // Redefines struct
{
SETTINGS[i] = {{2, "Test2"}};
}
}
编译错误:
在功能'main'中:
之前的预期表达式
| 20 |错误:'{'标记之前的预期表达式 在函数'init_struct'中:
| 45 |错误:下标值既不是数组也不是指针也不是矢量
| 45 |错误:'{'标记
答案 0 :(得分:2)
首先,有了这个:
Name settings[MAX_NAMES];
for(i=0; i<=MAX_NAMES; i++) // Initializes struct
{
settings[i] = {1, "Test"};
}
当你定义一个结构时,你只能使用那种初始化列表,你已经使用Name settings[MAX_NAMES]
做了。你将不得不做settings[i].int_value = 1;
等等。
对于第二个问题,您声明了一个接受struct name
的函数,但您尝试将其视为数组。你应该把它改成:
void init_struct(struct name * SETTINGS) {
int i;
for(i=0; i < MAX_NAMES; i++) {
SETTINGS[i].int_value = 2;
SETTINGS[i].string_value = "Test2";
}
}
请注意从i <= MAX_NAMES
到i < MAX_NAMES
的更改。您还需要在第一个for
循环中进行此更改。
调用该功能时,您还需要将init_struct(settings[MAX_NAMES]);
更改为init_struct(settings)
。
像这样:
#include <stdio.h>
#define MAX_NAMES 5
typedef struct name // Struct template
{
int int_value;
char *string_value;
} Name;
void init_struct(struct name *SETTINGS); // Function prototype
int main() {
int i;
Name settings[MAX_NAMES];
for (i = 0; i < MAX_NAMES; i++) // Initializes struct
{
settings[i].int_value = 1;
settings[i].string_value = "Test";
}
printf("Before function call:\n-------------\n");
for (i = 0; i < MAX_NAMES; i++) // Prints struct
printf("%i : int_value = %i, string_value = %s\n",
i, settings[i].int_value, settings[i].string_value);
init_struct(settings); // Calls function to reinitalize struct
printf("\n\nAfter function call:\n-------------\n");
for (i = 0; i < MAX_NAMES; i++) // Prints struct
printf("%i : int_value = %i, string_value = %s\n",
i, settings[i].int_value, settings[i].string_value);
return 0;
}
void init_struct(struct name *SETTINGS) {
int i;
for (i = 0; i < MAX_NAMES; i++) // Redefines struct
{
SETTINGS[i].int_value = 2;
SETTINGS[i].string_value = "Test2";
}
}
输出:
paul@local:~/src/c/scratch$ ./stu
Before function call:
-------------
0 : int_value = 1, string_value = Test
1 : int_value = 1, string_value = Test
2 : int_value = 1, string_value = Test
3 : int_value = 1, string_value = Test
4 : int_value = 1, string_value = Test
After function call:
-------------
0 : int_value = 2, string_value = Test2
1 : int_value = 2, string_value = Test2
2 : int_value = 2, string_value = Test2
3 : int_value = 2, string_value = Test2
4 : int_value = 2, string_value = Test2
paul@local:~/src/c/scratch$