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 回答