输入和输出数组不匹配

时间:2013-03-26 03:18:07

标签: c arrays printing output

我正在为学校的一个班级编写一个课程,我无法让该程序打印出我输入的内容。

问题表明第一行需要包含“考试”中的问题数量,然后是空格,然后是答案键。我想打印答案密钥,以确保它正确输入,并且它永远不会与我输入的内容相匹配。代码发布在下面。

这是开始运行的主文件,它从另一个文件中调用一个方法,我已经正确地制作了原型文件,所以我很确定它不是那样。

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;
}

2 个答案:

答案 0 :(得分:0)

调用AnswerKey时,将在堆栈上分配char数组fgetAnswers。从fgetAnswers返回时,存储在该调用的堆栈帧中的数据不再有效。您需要传入数组或分配它,以便输入不存储在堆栈中。

答案 1 :(得分:0)

这里有一个记忆问题。

您将数据存储到AnswerKey数组中,该数组位于fgetAnswers()的本地。问题是你正在返回一个指向该局部变量的指针,并且只要你的fgetAnswers()函数完成不应该访问的内存,该变量的内存就不可靠。因此,当您尝试在main()中打印数据时,您不应该访问内存。

要解决此问题,请在main中创建AnswersKey数组,并将其作为参数传递给fgetAnswers()函数。