seongkwonii   5년 전

2

(((((

()

하면

NO

NO가 나오네요

근데 스택 초기화를 다 했는데도 왜 그런걸까요..

배열 초기화도 같이 해줘야 되는걸까요?

kimsy96   5년 전

초기화가 이상한건지

2

(())()

() 하면

두번째 것이 

NO가 나옵니다 

djm03178   5년 전

sizeof(input)은 문자열의 길이가 아니라, input 배열의 크기인 51입니다. input[i] != 0 으로 해보세요.

seongkwonii   5년 전

@djm03178

와 한번에 해결됐어요

근데 궁금한건 

1.배열을 0으로 초기화한것도 아닌데 input[i]!=0 조건이 어떻게 성립되는거죠?

2. 만약 배열을 for문 밖에 두었다면, 어떻게 초기화를 해줄 수 있을까요?

for(int i=0; input[i]!=0; i++)

{

input[i]=0;

}

뭐이런식인가요?

djm03178   5년 전

문자열이라는 것 자체가 끝에 널 문자가 있어야만 됩니다. 모든 문자열 관련 함수들은 다 그렇게 동작합니다. 즉, cin >> input 이라는 것 자체가 input에 널 문자를 삽입해주는 것이 보장되어 있습니다.

input은 배열이므로 한 번에 모두 초기화하고자 한다면 char input[51] = {0}; 이렇게 하면 됩니다.

seongkwonii   5년 전

@djm03178

답변 감사합니다.  

 

1.

문자열 끝에 '\0'이 붙는 것은 알지만,

\0이랑 0은 다른거라서 input[i]!=0이 아니라 input[i]!='\0'이렇게 되야 하는게 아닌가 싶어서요!

2. 배열 초기화

char input[51]={0};은 배열 선언과 동시에 초기환데

저는 이미 사용된 배열을 재사용할 때 초기화해줘야 되지 않나 싶어서요.

line 19에 있는 배열을 line 17의 for문 밖으로 주었을 때처럼요. (메모리 할당을 아끼기 위해?)


djm03178   5년 전

'\0'이랑 0은 같습니다. 굳이 차이점이라면 '\0'은 char에서의 0이라는 것 정도죠. 하지만 둘은 완벽하게 호환됩니다.

초기화는 그렇게 for문을 돌려도 되고, memset 같은 걸 사용해도 됩니다.

seongkwonii   5년 전

@djm03178

감사합니다^^

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