프로그래밍

 3198, 1/160 회원가입  로그인  
   capt_0669
   1차원 배열에 대해서...질문이요

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


#include <stdio.h>

int main(void)
{
        char str[5]="Good";
        
        printf("%c \n", str);

        return 0;
}

이렇게 해봤는데

L이 나오네요;;;

근데 %s는 문자열을 출력해야 되는데 str[5]는 char이잖아요

그 이유가 제생각에는:

str[1]등에다가는  char밖에 못넣으니깐

char이고

printf("%s \n", str)인 이유는

str[5]는, str[0] + str[1] + str[2] + str[3] + str[4] = Good 즉, 한 문장이니깐

그런건가요??

---------------------------------------------------------------------------------------------

왜 L이 나오죠?? L은 아스키코드로 76은제 Good 들은 다 더하면 200은 넘을텐데....

그리고

문장을 만들려면 printf("아햏햏햏")가 더 낳지 않나요?? 저런식으로 하는것 어디서 쓰나요??-%s 왜 있나요??



  Hit : 5145     Date : 2011/01/03 05:38



    
capt_0669 궁금한점이 더 있네요....

몇개 더 몇분후에 올릴께요
2011/01/03  
ruka270 %c %s등은 포맷스트링 패턴이고, 해당 패턴에 맞는 데이터를 지정해줌으로서 문자열이나 입력 스트림의 형태를 결정짓는 역할을 합니다.
printf함수에서 %s는 주어진 포인터를 시작점으로 널문자(\0)를 만날때까지 아스키코드로 변환해서 출력해줍니다.
하지만 %c를 넣으셨으므로 str변수의 시작점 포인터 자체를 한개의 문자로 바꾸어 출력해버려서 이상한 결과가 나온것 뿐입니다.
참고로 숫자가 256보다 크게되면 256단위로 아스키코드표 처음부터 돈다고 생각하시면됩니다.
아래 소스를 테스트해보시면 이 관계는 명확해질겁니다.

main(){
printf("%c\n",(256*1024)+65);
}
2011/01/03  
ruka270 문자로 나타냈을때 : [ G ] [ o ] [ o ] [ d ] [ \0 ]
숫자로 나타냈을때 : [71] [111] [111] [100] [0]

생각하시는것처럼 문자열은 메모리상에서 그저 문자를 가르키는 문자를 가르키는 숫자의 연속(배열)일 뿐입니다.
아스키 문자를 사용하는 경우, 문자 하나당 1바이트씩 사용되며 1바이트 크기를 가지는 char형 변수 한자리를 차지합니다.
'Good'이라는 문자열을 나타내기 위해서는 최소 4자리가 필요하며, 추가적으로 문자열의 종료를 나타내는 널문자(\0)를 나타내기 위해서 한자리가 더 필요하므로 5자리 크기를 가지는 char형 배열이 필요한거구요.
2011/01/03  
capt_0669 아....감사합니다^^

%s는 주어진 포인터를 시작점으로 널문자(\0)를 만날때까지 아스키코드로 변환해서 출력해줍니다

에서 확 깨달았어요
2011/01/04