potocanon1234   2년 전

아래는 제가 생각한 문제 풀이 방법순서인데요

1. 임시 문자열 저장소인 a에 입력 문자열 저장->동적 메모리 p에 크기 맞게 저장

2. strcpy로 배열 a에 저장된 문자열을 p에 복사한다

3. 새 함수에  포인터p에 저장된 주소와 동적메모리의(문자열부분)사이즈 인수제공

4. pa를 통해 동적메모리에 접근하여 문자열과 알파벳 비교해서 문자열과 동일한 알파벳이 있는 알파벳 배열의 해당칸 +1 

5. 알파벳 배열을 비교해 Max구하고 Max와 같은 값의 알파벳 배열 요소가 있으면 ?반환 아니면 해당 알파벳 요소 번호+97(아스키코드 소문자) 로 반환(char)

Q1. 과정1에서 임시저장소를 쓸때 char a[1000001]이라는 엄청난 크기의 배열을 만드는데  "함수에서 '1000008'바이트의 스택을 사용하는데 이 크기가 

/analyze:stacksize'16384'를 초과했습니다 일부 데이터를 힙으로 이동하십시오"라는 경고가 뜹니다. 스택은 일반 지역변수 메모리 저장공간, 힙은 동적 메모리 저장 공간으로 알고 있는데 스택에 너무 큰 영역을 할당해서 동적메모리도 쓰라는 건가요? 

Q2. 동적메모리를 쓰려면 임시 저장배열을 통해서 strlen()를 이용해야 하지 않나요?

Q3. 예제는 되는 듯한데 오답으로 나옵니다

jwkim6800   2년 전

A1. 경고는 오류가 아닙니다. 무시하고 사용하셔도 무방합니다.

A2. 동적할당은 힙영역에서 할당되는 것이 맞고 strlen() 을 사용하여 할당해줄 수도 있습니다.

A3. 대문자로 출력해야 하는데 소문자로 출력하셨습니다. 

46번째 줄을 return (char)(MaxNUM+65); 로 변경하시면 통과됩니다.

댓글을 작성하려면 로그인해야 합니다.