ssms7733   1년 전

엄청 간단한 함수인데 2차원 배열에 값할당이 안됩니다 ㅠㅠ

제가 디버깅해보니 문자열 길이가 같을때는 되지만 다를때는 안되네요...

내일마감인 과제인데 도와주세요 ㅠㅠㅠㅠㅠㅠㅠㅠ

preview

seawon0808   1년 전

혹시 이렇게 나오는 게 맞는 건가요?

ssms7733   1년 전

저렇게 나오는거 맞습니다 ㅠㅠ 

근데 이렇게 오류가 나네요 ㅠㅠ

preview

seawon0808   1년 전

그건 c로 실행시키셔서 그런 겁니다.

c에서는 배열의 크기를 선언할 때 변수가 들어가면 안됩니다.

c++로 실행시키시면 잘 나올 겁니다.

ssms7733   1년 전

gcc에서는 배열에 변수넣고 선언 가능하지 않나요?? 

과제가 c언어로 고정이라 방법이 없네요 ㅠㅠ

djm03178   1년 전

gcc라면 확장 기능으로 제공하므로 써도 되지만, 에러 메시지 그대로 선언 시 바로 초기화를 할 수 없습니다. memset 등을 사용하거나, 이중 for문을 돌면서 전부 0을 하나씩 대입해줘야 합니다.

0000000000   1년 전

@seawon0808 VLA(가변 길이 배열, 배열의 크기에 변수를 넣는 것)은 C99 표준입니다.

또한 int d[100][100] = {}, int d[100][100]={0}, int d[100][100]={0,} 등등 모두 올바르게 초기화되지 않습니다. 첫 번째의 경우는 아예 배열에 아무런 초기화를 하지 않는 것이나 마찬가지이며, 두 번째와 세 번째는 첫 번째 칸만 0으로 채우게 됩니다. 나머지 칸들에는 모두 쓰레기값이 들어가 있습니다. 제대로 초기화를 하려면 memset() 함수를 이용하거나 for문을 이용하는 등의 방법을 사용해야 합니다.

djm03178   1년 전

초기화는 모두 0으로 되는 것이 맞습니다. 가변 인자 배열이라서 해당 방법을 사용하지 못할 뿐입니다.

seawon0808   1년 전

죄송합니다.

제가 잘못 알고 있었네요.

저는 0000000000 님이 말하신 방법을 사용하면 초기화가 되는 것으로 알고 있었고, 검색을 해봐도 그렇게 나옵니다.

그리고 중괄호를 사용하면 나머지 칸들에 쓰레기 값이 들어있던 것이 0으로 바뀌었는데 더 알려주실 수 있나요?

djm03178   1년 전

https://en.cppreference.com/w/...

다만 빈 중괄호 {}로 초기화하는 것은 C23 이전까지는 C에서는 비표준이며 C++에서만 사용 가능합니다.

0000000000   1년 전

초기화에 대해서는 제가 잘못 알고 있던 것 같네요. 제대로 레퍼런스도 찾아보지 않고 댓글 단 점 죄송합니다.

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