2013-03-26 8 views
0

일치하지 않는 그리고 내가 입력 무엇을 인쇄 할 수있는 프로그램을 얻을 수 없습니다.입력 및 출력 배열 내가 학교에서 수업 프로그램을 쓰고 있어요

문제는 첫 번째 줄이를 포함 할 필요가 있다고 주장한다 '시험'에있는 질문의 수와 그 다음에 답안 키를 누르십시오. 답변 키를 인쇄하여 올바르게 입력되었는지 확인하고 입력 한 내용과 일치하지 않습니다. 코드는 아래에 게시되어 있습니다.

이것은 실행되기 시작한 주 파일이며 다른 파일의 메서드를 호출합니다. 프로토 타입 파일을 올바르게 작성 했으므로 그 파일이 아닙니다. fgetAnswers가 호출 될 때

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

여기에있는 것은 메모리 문제입니다.

fgetAnswers()에 로컬 인 AnswerKey 배열에 데이터를 저장하고 있습니다. 문제는 당신이 그 지역 변수에 대한 포인터를 반환하고, 변수의 메모리가 fgetAnswers() 함수가 끝나자 마자 메모리가 액세스되어서는 안된다는 것이다. 따라서 main()의 데이터를 인쇄하려고 할 때 메모리에 액세스하면 안됩니다.

해결하려면 AnswersKey 배열을 메인에 만들고 fgetAnswers() 함수에 매개 변수로 전달하십시오.

+0

완벽한! 정말 고맙습니다! – henryjarend

0

문자 배열 AnswerKey는 스택에 할당된다. fgetAnswers에서 돌아 오면 해당 호출에 대한 스택 프레임에 저장된 데이터가 더 이상 유효하지 않습니다. 입력이 스택에 저장되지 않도록 배열을 전달하거나 할당해야합니다.

+0

그래서'char answerKey [noOfQuestions]; '를 주 함수의 맨 앞에 추가하고 몇 줄 뒤에'answerKeyPtr = & answerKey [0];'을 추가했습니다. 네가 그 얘길하고있는거야? 나는 여전히 포인터와 다소 혼동을 느낀다. – henryjarend

+0

당신은 여전히 ​​문제가있다. noOfQuestions에 대한 값을 가질 때까지 char answerKey [noOfQuestions]를 사용하여 배열을 할당 할 수 없습니다. 질문의 수를 읽은 후에 공간을 할당해야합니다. 또한 MAXQUESTIONS 상수를 정의하고 그 크기로 배열을 선언 한 다음, 읽은 숫자가 <= MAXQUESTIONS인지 확인하십시오. 당신이 포인터에 익숙해 져야하기 때문에 alloc을 사용하는 것이 좋습니다. – Fred

+0

배열을 할당하여 응답을 저장 한 후 fgetAnswers 함수에 전달하십시오. fgetAnswers (int noOfQustions, char * questionBuffer) 또는, alloc()을 사용하여 함수 내에 문자 배열을위한 공간을 할당하십시오. 돌아 오는 것이 안전 할 것입니다. 잠시 후 free()를 사용하여 alloc() 된 공간을 해제하는 방법을 배워야한다. – Fred

관련 문제