C&C++

헷갈리는 함수와 연산자 malloc, length, strlen, sizeof, size

mmalmmizal 2022. 8. 17. 18:18

1. malloc함수 

동적으로 메모리를 생성하는 함수

인자로 넘겨준 크기만큼 메모리를 생성하고 그 포인터를 반환한다.

malloc는 할당된 공간에 대한 void 포인터를 반환하거나 사용 가능한 메모리가 부족한 경우 NULL을 반환한다.

 

2. 헷갈리는 문자열 길이 구하는 함수 (+sizeof 연산자)

length() / strlen() / size() / sizeof()

 

- length() : Return length of string, 문자열의 길이를 반환하는 함수, string의 멤버함수

변수.length(), 단 char 문자열을 변수로 받는다면 사용할 수 없다.

 size_t length() const noexcept;

 

- strlen() : 문자열의 길이를 구해주는 함수, 문자열을 구성하는 null(/0)문자를 제외한 문자의 개수를 반환한다.

공백 문자일 경우 0 반환. string을 변수로 받는다면 사용할 수 없다.

우선 strlen()함수를 사용하기 위해서는 C는 string.h, C++은 cstring헤더를 추가해줘야 한다.

함수 원형 size_t strlen (const char* str);

const char* 타입의 문자열을 받아서 해당 문자열의 길이를 반환하는 함수.

size_t(unsigned integral type, 부호 없는 64비트 정수 혹은 부호 없는 32비트 정수를 의미하는 자료형)

 

- size()

strlen()함수와 기능이 완전히 동일하다고 생각. string의 멤버함수

Both string::size and string::length are synonyms and return the exact same value.

string::length - C++ Reference (cplusplus.com)

 

length() 메소드는 문자열의 길이를 나타내지만, size() 메소드는 해당 string 객체가 메모리에서 실제 사용하고 있는 크기를 나타낸다.

코딩의 시작, TCP School

apple공백공백 입력했을 때

 

 

 

- sizeof 연산자 :  메모리 공간을 차지하는 byte수를 return 합니다. 자료형의 크기를 구할 때 사용한다.

 

 

string 자료형의 크기?

string은 vector<char>와 비슷한 방식으로 동적할당을 이용해 구현이 되었다.

typedef char *string;    즉 string은 char의 포인터 변수 커스텀타입

 

sizeof(string)하면 왜 39까지나오지 ? 8*5해서 40byte로 계산되었나보다.

왜 string 한 칸은 8바이트지? 포인터 변수는 32비트 운영체제에선 4바이트, 64비트 운영체제에선 8바이트를 의미한다.