may900515   6달 전

char a[101] = { 0 };


여기서 101을 100으로 바꾸면 런타임에러가 되고 101을 하면 틀렸습니다 라고 뜹니다..

단순한거 같은데 왜 안될까요?

uppo97   6달 전

1. 런타임에러는 보통 할당되지 않은 메모리를 참조할 때 일어납니다. a[100]인경우 저희가 참조할 수 있는 인덱스는 a[0]~a[99]인데, n = 100인 경우 2번째 for문에서 j = 100, 곧 a[100]에 접근하게 됩니다. 그래서 런타임 에러가 일어나는거구요.

2. a[101] = { 0 }; 에서 a라는 배열은 전부 0으로 초기화되어있습니다. for문을 거쳐서 뒤에서부터 *을 채워나가며 찍으려는 방법을 선택하신 것 같은데, ASCII code에서 0이란 값은 null로서, %c로 찍으면 아무것도 출력이 되지 않습니다. 그러므로 *만 출력이 되어 문제에서 원하는 모양이 아닌 좌우대칭이 된 모양으로 나온 것이죠. 초기화를 해줄 때 모든 index에 대해서 ' '과 같이 공백으로 채워준다면 괜찮아질 것 같네요.

may900515   6달 전

uppo97님 

정말 좋은 답변 감사드립니다. 하지만 ' ' 공백으로 초기화를 해보아도  틀렸다고 뜨는데 오류를 못찾겠습니다..

uppo97   6달 전

코드를 보여주실 수 있을까요?

초기화를 진행 할 때, a[101]={' '}; 과 같이 진행하셨으면 첫번째 원소 이외에는 전부 0으로 초기화되어있는 상태입니다.

for(int i = 0; i < 101; i++) a[i] = ' '; 이런식으로 해주셔야 모든 원소가 초기화 되는거구요!

may900515   6달 전

정말감사합니다.

그런데 int a[101]  ={ 0,};

보통 이렇게하면 전부 0으로 초기화 된다고 하더라구요.

그런데 char 로 정의해서 저렇게 사용이 불가능한건가요??


해결된것에 정말 감사드립니다..

uppo97   6달 전

모든 자료형에 대해서 {}으로 초기화시에, 초기화가 된 원소 이외에는 0으로 초기화가 됩니다.

ex) char in[32] = {'c', 'a', 't'}; 이라고 하면 in[0] = 'c', in[1] = 'a', in[2] = 't', in[3]~in[31] = 0 으로 초기화가 되는거죠!

may900515   6달 전

도움이 많이되었습니다 정말 감사드립니다.

다음에 또 도움을주시면 더 감사드리겠습니다. ㅎㅎ

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