我正在为学校的一个班级编写一个课程,我无法让该程序打印出我输入的内容。
问题表明第一行需要包含“考试”中的问题数量,然后是空格,然后是答案键。我想打印答案密钥,以确保它正确输入,并且它永远不会与我输入的内容相匹配。代码发布在下面。
这是开始运行的主文件,它从另一个文件中调用一个方法,我已经正确地制作了原型文件,所以我很确定它不是那样。
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;
}
答案 0 :(得分:0)
调用AnswerKey
时,将在堆栈上分配char数组fgetAnswers
。从fgetAnswers
返回时,存储在该调用的堆栈帧中的数据不再有效。您需要传入数组或分配它,以便输入不存储在堆栈中。
答案 1 :(得分:0)
这里有一个记忆问题。
您将数据存储到AnswerKey
数组中,该数组位于fgetAnswers()
的本地。问题是你正在返回一个指向该局部变量的指针,并且只要你的fgetAnswers()函数完成不应该访问的内存,该变量的内存就不可靠。因此,当您尝试在main()
中打印数据时,您不应该访问内存。
要解决此问题,请在main中创建AnswersKey
数组,并将其作为参数传递给fgetAnswers()
函数。