0

私は C は初めてですが、数週間前にパスカルでプログラミングしました。パスカルでは、配列データを変更する場合は、var myArray基本的に入力して参照渡しします。Cでこれを行う方法がわかりません。たくさんの質問を読みましたが、どれもうまくいかないようです。これが私がこれまでに持っているものです。

void set_up_elements(char (*array_to_populate)[20])
{
    char* buffer;
    FILE *f;
    f=fopen("elementList.txt","r");
    char copied_text[118][20];
    int i=0;
    while (!feof(f))
    {
        fgets(copied_text[i],80,f);
        ++i;
    }
    //Close the file to free up memory and prevent leaks
    fclose(f);
    f = NULL;
}

配列にデータを入力するコードは次のとおりです。周期表の要素のリストを配列に読み込みますcopied_text。この部分は機能し、関数の内側にある配列に正常に入力されます。

int main()
{
    char element_array[118][20];
    set_up_elements(element_array);
<..>
}

これが私がそれを呼び出そうとしている方法です。配列の内容はelement_array変更されません。これを修正する方法を知っている人はいますか?ありがとう。

4

3 に答える 3

3

1) 次の行が間違っています

fgets(copied_text[i],80,f);

文字列の配列内の 1 つの要素文字列のサイズは です20。そして、あなたのfgets()関数で読み取る最大文字数は80

に変更します:

fgets(copied_text[i],sizeof(copied_text[0]),f);

2) そして、このコードを変更することができます:

while (!feof(f))
    {
        fgets(copied_text[i],80,f);
        ++i;
    }

while (i<118 && fgets(copied_text[i++],80,f));

3) 関数の入力パラメーター

void set_up_elements(char (*array_to_populate)[20])

関数では使用されません。関数に入力したいようですが、そうではなく、呼び出し元からは見えない別の配列 (ローカル配列) を使用しています。

于 2013-04-24T16:14:25.023 に答える
1
void set_up_elements(char (*array_to_populate)[20])
{
    char* buffer;//unuse var
    FILE *f;
    f=fopen("elementList.txt","r");
    int i=0;
    while (!feof(f))//caution
    {
        fgets(&(*array_to_populate[i]),20,f);
        ++i;
    }
    //Close the file to free up memory and prevent leaks
    fclose(f);
    f = NULL;
}
于 2013-04-24T16:25:41.213 に答える