계속 질문만 하네요. 코드블럭으로 C 공부하는 잼민이 입니다.
C에서 char형 변수는 용량이 1Byte로 알고 있습니다.
ASCII 코드로 단어가 저장되기에
char C = 65;
printf("%c %d", C, C) ;
하면 출력이 A, 65가 되는것 까지는 이해했습니다.
좀 더 구체적으로 말하자면
00000000 <===요게 2진수 8bit 에서
C에 65가 저장되면
01000001<===이리 되고
문자로 출력하면 A, 10진수로 출력하면 65가 되는거겠죠.
그런데....한 단어 이상 되는 문자는 어떻게 char형에 저장이 되나요?
개인적인 추측이지만, char에 문자저장될때 그 길이를 지정해주고 NULL문자로 끝을 찍어줘야 하니까.
예를 들어 char C[10] 이라고 한다면
C에는 문자의 첫번째 글자만 들어가고 나머지 글자들은 ...C[10]에 저장되는 문장의 첫번째 글자가 들어가는 물리적인 어떤 공간에서 연속적으로 들어가는거 아닌가 합니다.
그래서 NULL문자로 끝을 안 찍어주면 어디서 문장이 끝나는지 모르니 되던안되는 끝까지 출력되는 거고...
혹시 저의 추측이 맞는지요?
C[10] 으로 초기화가 되었다면 C[0] 첫번째 문자 겸 char 배열을 읽기 시작할 위치 C[1] 두번째 문자 C[9] 열번째 문자 로 저장 됩니다. 저장되는 방식은 특정 주소로가서 정의된 타입으로 몇번째 까지 또는 특정 기호를 만나기 전까지 라는 식으로 정의가 된다는 느낌 입니다.
아, 그러니까 실질적으론 C[10]하면 10Byte라는 의미인가요?
C[10]에 대한 접근은 범위를 벗어나니 고확률로 세크폴트
Char array나 문자 배열에 대해 찾아보시면 더 정확한 설명을 보실수 있을 겁니다.
문장의 끝을 나타내는 심볼을 위해 11byte 일겁니다.
https://dojang.io/mod/page/view.php?id=60 https://dojang.io/mod/page/view.php?id=327
주소를 확인할 수 있는 코드 입니다. 온라인 c++컴파일러를 사용한거라 해더가 좀 그렇기는 하지만; #include <iostream> #include <cstring> using namespace std; int main() { char example[] = "hello"; printf("%c\n", example[0]); printf("%s\n", example); printf("%lu\n", sizeof(example)); printf("%lu\n", strlen(example)); printf("Address of example[0] = %p\n", &example[0]); printf("Address of example[1] = %p\n", &example[1]); printf("Address of example[2] = %p\n", &example[2]); printf("Address of example[3] = %p\n", &example[3]); printf("Address of example[4] = %p\n", &example[4]); return 0; }
돌리시면 아마 이거 비슷하게 나올 겁니다. hello 6 5 Address of example[0] = 0x7ffc0f5eedb2 Address of example[1] = 0x7ffc0f5eedb3 Address of example[2] = 0x7ffc0f5eedb4 Address of example[3] = 0x7ffc0f5eedb5 Address of example[4] = 0x7ffc0f5eedb6
크기의 경우 sizeof(example) = 6 => 문자 5byte + 단어의 끝을 알리는 심볼 1byte strlen(example) = 5 => 단어의 길이는 5, 끝을 알리는 심볼은 길이에서 제외 됩니다. 저장되는 방식은 example의 각 부분의 주소를 보시면 알 수 있습니다. 주소를 출력하는 부분을 보시면 알 수 있지만 주소가 연속 되어 있습니다.
오, 이렇게 알려주시니 확 들어오네요 저는 char는 string이던 letter건 무조건 1byte인줄 알고 있었는데 역시 길이에 따라 유동적이군요. 감사합니다.
혹시나 해서 하는 말이지만 char 은 1byte 입니다 char [10]은 char 타입 11개(문자10 심볼1)로 구성된 총 11byte의 배열 입니다.
char [10] 은 10byte 입니다.
그 끝자리를 알리는 심볼도 들어가지 않나요?
다시 생각해 보니 그 10byte에 포함이군요. 이런 실수를;;
char배열이 곧 단어고 문장인데 나만 이해 못했나
질문을 하신 분이 아직 배열 관련 내용 배우시지 않으셔서 올리신 질문인 것 같습니다. 저는 질문 내용을 char에 단어나 문장이 어떻게 저장되는 가를 물으신 걸로 이해했습니다.
네 그런가보네요 제가 질문을 이해를 못하겠어서...;;