首先,有了这个:
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$