2

私はこのサイトが初めてで、プログラミングも初めてです。

構造体の配列を宣言し、関数呼び出しで初期化できるようにしようとしています。次に、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"}};
    }
}

コンパイル エラー:

関数「メイン」:
|20|
エラー:関数 'init_struct' 内の'{' トークンの前に式が必要です:
|45| エラー: 添字付きの値は配列でもポインターでもベクトルでもありません
|45| エラー: '{' トークンの前に式が必要です

4

1 に答える 1

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;などがあります。

2 番目の問題では、 を受け入れる関数を宣言しますが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_NAMESfor最初のループでもこの変更を行う必要があります。

その関数を呼び出すときにも変更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$
于 2013-10-23T00:41:24.113 に答える