C언어에서 문자열을 다루는 함수는 조심히 사용해야 한다.
가령 strlen() 함수는 문자열의 길이를 구하는 함수인데, 널(\0) 을 만날 때까지 계속 읽어나간다. 만약 메모리 구조가 잘못되어 널문자를 못 만난다면 계속 읽어 나가거나 이상한 동작을 일으킬 수 있다.
아래에는 문자열을 관련 함수 중 널 문자를 기준으로 동작하는 함수를 정리해보았다.
이 함수들을 사용할 경우에는 대상이 되는 문자열에 널이 보장되는지 꼭 확인하여 메모리 끝까지 읽다가 프로그램이 죽거나 오동작을 일으키는 상황을 방지해야 한다.
함수 | 동작방식 |
strlen(str) | 널을 만날때 까지 문자 수를 센다. 특히 strlen 함수는 컴파일시가 아닌 런 타임에 동작하므로 유의가 필요하다. |
strcpy(dest, src) | src에서 널을 만날 때까지 복사를 진행하므로, src에 널이 없으면 오동작 가능. |
strcat(dest, src) | dest의 널 문자를 찾은 후 src를 붙이므로 dest의 널 문자가 보장 안되면 이상한 곳에 concat 가능. |
strcmp(s1,s2) | 두 문자열을 널 문자 전까지 비교. 널이 보장 안되면 원하는 비교 불가할 수 있음. |
strchr(str,ch) | 내부적으로 널 문자까지 탐색하므로 널 문자가 보장되지 않으면 오동작 가능 |
'C 언어' 카테고리의 다른 글
[c언어] printf 함수로 문자열 헥사(Hex) 값 찍어보기 (0) | 2025.01.18 |
---|---|
[C언어] 컴파일 과정 (0) | 2024.06.08 |
[c언어] malloc 함수로 메모리 할당 후 해제하기 (0) | 2024.05.12 |