2024-05-14
빈 칸과 \0(NULL) 다르다.
strlen 기능
strlen은 NULL charter(\0)를 자동적으로 빼주기 때문에, 순수하게 문자가 몇 개가 있는 지 알려준다.
\n 그리고 escape sequence (각각 줄바꿈, 빈 칸)같은 경우도 strlen에서는 글자 한 개로 취급된다.
빈 칸인 space도 글자 한 개로 취급
size_t는 객체의 크기나 배열의 요소 개수 등을 표현하는 데에 사용되는 타입.
%zu는 부호 업슨 정수 타입인 size_t를 출력하기 위해 상요되는 형식 지정자이다.
#include <stdio.h>
#include <string.h>
int main() {
const char* str = "Hello, World!";
size_t length = strlen(str);
printf("문자열의 길이: %zu\\n", length);
return 0;
}
동적할당 간단한 예
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
char* str5 = (char*)malloc(sizeof(char) * 100);
str5[0] = 'H'; str5[1] = 'e'; str5[2] = 'l'; str5[3] = 'l'; str5[4] = 'o';
str5[5] = '\\0';
printf("% zu % zu\\n", sizeof(str5), strlen(str5));
return 0;
}
동적할당이라는 데, 솔직히 완벽히 이해를 못했다.
그러나, 여기서 확실히 알고가자!
위의 내용을 요약하자면
* 은 포인터인데 보통 int의 크기를 가지고 있다.
위처럼 동적으로 할당한 메모리 같은 경우는 데이터의 크기가 ‘포인터 변수 자체’가 출력됨.
따라서 sizeof(str5)은 4byte or 8 byte(int크기)가 출력된다.
그러니까 쉽게 말하자면, 보통 sizeof의 동작은 이렇게 된다.
sizeof(포인터) -> 포인터 주소의 자체 크기
sizeof(배열) -> 배열 전체의 메모리 크기
그런데 이번 꺼는 malloc 때문에 동적(動的)으로 할당된 메모리라는 거임.
대충 그냥 100 바이트 크기의 메모리가 할당받았는데, 이 그림으로 표현하자면.
이런거다.
뭔가 배열처럼 생겼지만, 배열이 아니다.
따라서 str5[0]은 배열처럼 생겼지만, 0번째 메모리 공간에 접근한다는 것이고, H를 할당했다.
따라서, sizeof(str5)은 포인터의 주소 크기인 4byte 또는 8byte 가 출력된 것이고,
strlen은 str5가 가지고 있는 문자열의 길이 즉, Hello의 길이인 5가 출력된 것이다.
출처: 홍정모의 따라배우는 C언어
강의 외의 추가된 것들은 책 그리고 인터넷 조사해서 얻었음
'배운 것들 메모 > 따라 배우는 C언어' 카테고리의 다른 글
[홍정모의 따라하며 배우는 C언어] 4.10 scanf() 함수의 사용법 메모 - 1 (0) | 2024.08.20 |
---|---|
[홍정모의 따라하며 배우는 C언어] 4.7 printf() 함수의 변환 지정자들 메모 (0) | 2024.08.19 |
[홍정모의 따라하며 배우는 C언어] 4.5 ~ 4.6 기호적 항수와 전처리기 메모 (0) | 2024.08.12 |
[홍정모의 따라하며 배우는 C언어] 4.3 문자열이 메모리에 저장되는 구조 (0) | 2024.08.08 |
[홍정모의 따라하며 배우는 C언어] 1.8 C언어와 함수 ~ 1.9 컴파일러 링커 메모 (0) | 2024.08.07 |