본문 바로가기

Today I Learned

23.01.27 - 문자열 함수, 구조체

문자배열 = char const* (상수)

요소를 바꿀 수 있고 가리키는 것은 바꿀 수 없다

 

문자열 상수 = const char* (읽기 전용 포인터)

요소를 바꿀 수 없지만 가리키는 것은 바꿀 수 있다.

 

 

 

문자열 함수

 

strcpy - 문자열 복사

 

strlen - 문자열 길이 계산
널문자는 길이에 포함 안한다(sizeof는 포함)

strcmp - 문자열 비교 
두 문자열이 일치할 경우 0, 불일치시 1

strcat_s - 문자열 결합

 

 

 

구조체

배열과 같은 블록단위 데이터로 중괄호로 초기화가 가능하다.

구조체는 멤버 변수 중 가장 큰 자료형을 가진 멤버를 기준으로 메모리 블록을 만든다.

struct tagInfo
{
    char c;
    short s;
    int i;
}

sizeof(tagInfo)는 8바이트다.

멤버 변수 중 int형이 4바이트로 가장 크기 때문에 4바이트 단위로 메모리 블록을 만든다.

4바이트 메모리 블록에 char형 c(1바이트), short형 s(2바이트)가 들어가고 int형 i는 4바이트이기 때문에

메모리블록의 공간을 넘기면 남은 1바이트를 채우지 않고 새로운 메모리 블록에 다음 멤버 변수를 저장한다.

c와 s가 있는 메모리 블록에는 의미 없는 공간 1바이트가 남는데 이것을 패딩이라고 한다.

typedef struct tagInfo
{
    char szName[24];
    short s;
    int i;
} INFO, *PINFO

구조체도 typedef로 이름을 바꿀 수 있다. 

typdef 자료형 이름 으로 다른 것들과 같은 방식이며 자료형 부분에 구조체가 들어간다.

그리고 위처럼 멤버변수로 char형 배열이 있을 때 배열의 크기가 24이므로 24바이트 단위로

메모리 블록에 저장하지는 않는다. 자료형을 기준으로 하기 때문에 배열의 자료형 char은 1바이트이고

int가 4바이트이기 때문에 4바이트 단위로 메모리 블록에 저장한다.