leedy5521   1년 전

어디가 틀렸는지 잘 모르겠습니다..

pill27211   1년 전

작성하신 코드대로 입력을 받게 되면, 전에 입력받은 정보가 현재 입력 결과에 영향을 줄 수 있게 됩니다. 예를 들어,

Input)

2

OOOXXOOXO

OXOX

Output)

10

6

즉, 같은 배열 변수에 입력받음으로써 전에 입력받은 스트링의 길이가 더 길 경우 (위 예시에서 두번째로 OXOX를 입력 했지만 결과적으로 전에 입력받은 정보가 남아있으므로 OXOXXOOXO가 되어 6이 출력되는 것.배열 변수의 이름은 곧 시작 주소를 의미) 위와 같은 문제가 발생합니다. 추가로 테스트케이스별 결과를 모아두었다가 나중에 한 번에 출력하지 않고 각 테스트마다 바로바로 결과를 출력(이후 개행)해 주셔도 됩니다.

leedy5521   1년 전

감사합니다!! 그렇게 문제가 발생할수도 있군요

질문 하나만 더 드려도 될까요..

9번 줄에서 int score[freq]; 하면 에러가 발생하지 않지만 int score[freq] = {0, }; 이렇게 초기화 하려 하면 variable-sized object may not be initialized 라고 에러가 발생하더라구요

그 이유가 무엇일까요??

pill27211   1년 전

원래 C언어는 배열 선언시 크기에 변수가 들어갈 수 없습니다(undefined behavior.). 따라서 동적할당이나 애초에 넉넉한 크기로 배열을 잡아주시는게 바람직한데요, (C++의 경우 STL컨테이너도 있음) C99부터는 이를 허용해 주는 걸로 압니다.(그래서 기존 9번째 줄의 코드에서 에러를 발생시키지 않음) 하지만 몇몇 컴파일러에서는 이를 여전히 허용하지 않습니다. 

int score[freq] = {0, };

위 코드는 컴파일시에 score의 크기가 정해지지 않은 상황에서 초기화(이니셜라이저)를 할 수 없기 때문에 컴파일 에러가 발생합니다. 

leedy5521   1년 전

오 그런 이유가 있군요 정말 양질의 유익한 답변 감사합니다..!

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