프로그래밍

 3198, 1/160 회원가입  로그인  
   ov13
   만든프로그램이 오류가 나는데 어떻게 바꿔야하죠?

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3001 [복사]


#include <stdio.h>

main()
{
        char code[]={0, };
        char b = ' ';
        int a = 0;

        for(a=0;a<30;a++)
        {
                b = getchar();

                switch (b)
                {
                        case '0':
                                code[a] = 'A';
                                break;
                        case '9':
                                code[a] = 'B';
                                break;
                        case '8':
                                code[a] = 'C';
                                break;
                        case '7':
                                code[a] = 'D';
                                break;
                        case '6':
                                code[a] = 'E';
                                break;
                        case '5':
                                code[a] = 'F';
                                break;
                        case '4':
                                code[a] = 'G';
                                break;
                        case '3':
                                code[a] = 'H';
                                break;
                        case '2':
                                code[a] = 'I';
                                break;
                        case '1':
                                code[a] = 'J';
                                break;
                        case 'a':
                                code[a] = 'K';
                                break;
                        case 'b':
                                code[a] = 'L';
                                break;
                        case 'c':
                                code[a] = 'M';
                                break;
                        case 'd':
                                code[a] = 'N';
                                break;
                        case 'e':
                                code[a] = 'O';
                                break;
                        case 'f':
                                code[a] = 'P';
                                break;
                        case 'g':
                                code[a] = 'Q';
                                break;
                        case 'h':
                                code[a] = 'R';
                                break;
                        case 'i':
                                code[a] = 'S';
                                break;
                        case 'j':
                                code[a] = 'T';
                                break;
                        case 'k':
                                code[a] = 'U';
                                break;
                        case 'l':
                                code[a] = 'V';
                                break;
                        case 'm':
                                code[a] = 'W';
                                break;
                        case 'n':
                                code[a] = 'X';
                                break;
                        case 'o':
                                code[a] = 'Y';
                                break;
                        case 'p':
                                code[a] = 'Z';
                                break;
                        default:
                                code[a] = ' ';
                }
                printf("code[%d] is %c\n",a,code[a]);
        }
        a = a + 1;
        code[a] = '\0';
        printf("\nThe letter you wrote is:\n");
        puts( code );
        return 0;
}

이렇게 써서 작동도 잘하는데 맨마지막에 이상한글씨(?나 십자가 등...) 1글자가 나오고 오류가 떳다고 종료해야된다고 뜨는데 왜그러죠?

  Hit : 3972     Date : 2011/05/15 05:04



    
clockmaker a=a + 1;
이거 지워 보세요
2011/05/15  
prosthetics char code[]={0, };
이렇게 선언하시면 안됩니다.

30개를 사용하실 거라면
char code[30] = {0};
위와 같이 바꿔주셔야 해요.

아래 코드 돌려보시면 code배열의 크기가 1인걸 발견하실 겁니다.
따라서 code배열을 넘어서 29개의 데이타를 메모리 어딘가에 덮어씌우게 되는것이죠.
이런 에러를 실행중에 발견했을 때 RUNTIME ERROR가 뜨는 겁니다.
#include <stdio.h>

main()
{
char code[]={0,};
printf("%d",sizeof(code));
return 0;
}
2011/05/25