0

学校のクラスのプログラムを書いていますが、入力した内容をプログラムで印刷できません。

問題は、最初の行に「試験」の質問の数と、それに続くスペース、そして回答キーを含める必要があることを示しています。回答キーを印刷して、正しく入力されていて、入力内容と一致しないことを確認したかったのです。コードは以下に掲載されています。

これは実行を開始するメインファイルであり、プロトタイプファイルを正しく作成した別のファイルからメソッドを呼び出すので、そうではないと確信しています。

int main()
{
    int i;
    int noOfQuestions;
    scanf("%d ", &noOfQuestions);
    char * answerKeyPtr;

    answerKeyPtr = fgetAnswers(noOfQuestions);

    for(i = 0; i < noOfQuestions; i++){
        printf("%c",answerKeyPtr[i]);
    }
    printf("\n");

    return 0;
}

char *fgetAnswers(int noOfQuestions){
    int i;
    char * answerKeyPtr;
    char AnswerKey[noOfQuestions];
    answerKeyPtr = AnswerKey;

    for(i = 0; i < noOfQuestions; i++){
        scanf("%c",&AnswerKey[i]);
    }

    return answerKeyPtr;
}
4

2 に答える 2

0

char配列は、が呼び出されたAnswerKeyときにスタックに割り当てられます。fgetAnswersから戻るとfgetAnswers、その呼び出しのスタックフレームに格納されているデータは無効になります。入力がスタックに格納されないように、配列を渡すか、配列を割り当てる必要があります。

于 2013-03-26T03:28:46.490 に答える
0

ここにあるのはメモリの問題です。

AnswerKeyにローカルな配列にデータを格納していますfgetAnswers()。問題は、そのローカル変数へのポインタを返していることです。fgetAnswers()関数が終了するとすぐにその変数のメモリは信頼できなくなり、そのメモリにアクセスするべきではありません。したがって、メモリにアクセスしているデータを印刷しようとするときは、main()そうすべきではありません。

これを解決するにはAnswersKey、mainで配列を作成し、それをパラメーターとしてfgetAnswers()関数に渡します。

于 2013-03-26T03:29:45.383 に答える