반응형
문자열 관련 함수
strlen() 문자열의 길이
strcmp() 문자열 A가 문자열 B보다 사전적으로 앞에 있으면 -1, 뒤에 있으면 1
strcpy() 문자열 복사
strcat() 문자열 A에 문자열 B를 더합니다.
strstr() 문자열 A에 문자열 B가 어떻게 포함 여부 반환
strlen (문자열의 길이를 반환하는 함수)
#include <string.h> 필요
참고로 strlen 함수의 반환형은 size_t이니, 반환 값을 unsigned int형에 저장하고 %u로 출력하는 것이 정확하나
문자열이 아무리 길어도 int형에 저장이 가능하기 때문에 반환 값을 int형 변수에 저장하고 %d로 출력하는 것이 흔함.
strcpy, strncpy (문자열을 복사하는 함수)
strncpy()의 경우 str1에 저장된 문자열을 str2에 복사하되,
str1의 길이가 매우 길다면 sizeof(str2)가 반환한 값에 해당하는 문자의 수 만큼만 복사
즉, 복사될 배열의 길이를 넘어서지 않는 범위 내에서 복사를 진행
하지만, 마지막 문자가 널 문자인지 아닌지는 상관 하지 않는다. 그렇기에 널문자 없이 복사했다가 엉뚱한 출력을 할 수 있다.
그래서 배열의 실제길이보다 하나 작은 값을 전달해서 널 문자가 삽입될 공간을 남겨두고 복사를 진행한 후 끝에 널 문자를 삽입
strncpy(str2, str1, sizeof(str2)-1);
str2[sizeof(str2) - 1] = 0;
strcat, strncat (문자열을 덧붙이는 함수)
ex) str1에 저장된 문자열의 뒤에 str2에 저장된 문자열 복사
str1의 널 문자 다음이 아닌, 널 문자가 저장된 위치에서부터 덧붙여 집니다.
그래야 문자열이 합쳐진 상태에서 문자열의 끝에 하나의 널 문자가 존재하기 때문입니다.
char str1[30] = "First-";
char str2[30]= "Second";
strcat(str1, str2) // First-Second
※ strncat(str1, str2, 8)
→ str2의 문자열 중 최대 8개를 str1의 뒤에 덧붙여라
즉, str2의 길이가 8을 넘어선다면 8개의 문자까지만 str1에 덧붙이라는 의미
널문자가 포함되지 않으니 널문자를 고려한다면 총 9개를 고려해야 합니다.
strcmp, strncmp (문자열 비교하는 함수)
* str1 == str2는 문자열의 주소를 비교하는 것입니다.
따라서, strcmp(str1, str2)로 문자열을 비교해야 합니다.
▷ str1 > str2 양수 반환
▷ str1 < str2 음수 반환
▷ 같으면 0 반환
※ 아스키 코드 값을 기준으로 크기 비교
문자열의 없는 널 문자도 비교 대상에 포함됩니다. (널 문자의 아스키 코드 값 = 0)
ex) "ABC"와 "ABCD" 비교할 때, '널 문자'와 'D' 비교
※ strncmp(s1, s2, n) 크기 n 만큼만 비교합니다.
※ stdlib.h 헤더파일에 선언된 함수들
- atoi 문자열의 내용을 int형으로 반환
- atol 문자열의 내용을 long형으로 반환
- atof 문자열의 내용을 double형으로 반환
반응형
'프로그래밍 언어 > C 언어' 카테고리의 다른 글
[C] 문자열 배열과 문자열 배열 동적 할당 (0) | 2021.03.20 |
---|---|
[C] 함수의 선언 (0) | 2021.03.19 |
[C] 지역변수와 전역변수 (0) | 2021.03.19 |
[C] static 변수 (0) | 2021.03.19 |
[C] 구조체 (structure) (0) | 2021.03.19 |
댓글