[C] 문자열 처리 함수
C언어의 문자열을 처리하는 함수들을 정리했습니다.
개요
- C언어에서 문자열을 사용하기 위해서는
헤더가 필요하다. - C++에서는
이나 를 포함시켜야 한다.
strlen
- 문자열의 길이를 알려준다.
strcpy
- 두 포인터를 받고, 그 위치에서 한칸씩 이동하며 문자를 복사.
- null 문자를 만날때까지 반복
strcpy_s
- strcpy에서 dest의 사이즈가 src의 크기 보다 작은 경우 오버플로 에러가 발생할 수 있다.
- 이 단점을 보완하기 위한 함수.
errno_t strcpy_s( char *restrict dest, rsize_t destsz, const char *restrict src );
strcat
- 첫 문자열의 null 문자 위치부터 두번째 문자열이 덮어 씌워진다.
- 두번째 문자열이 모두 붙을 만큼 첫 배열의 크기가 충분한 크기여야 한다.
strcmp
- 두 문자열을 사전적 순서로 비교해서, 첫 문자열이 더 크면 양수, 같으면 0, 작으면 음수 반환
#include <iostream>
#include <cstring>
using namespace std;
void printString(char* cptr, int size)
{
cout << "ch : [";
cout << *cptr;
for (int i=1; i<size; ++i) {
cout << ", " << *(cptr + i);
}
cout << "]" << endl;
}
void cmp(char* ch1, char* ch2)
{
if(strcmp(ch1, ch2) == 0) {
cout << ch1 << "와 " << ch2 << " 는 같다. " << endl;
} else {
cout << ch1 << "와 " << ch2 << " 는 다르다. " <<endl;
}
}
int main()
{
char ch[11] = "0123456789";
char ch1[21];
strcpy(ch1, ch);
printString(ch1, strlen(ch1));
char ch2[11];
strcpy(ch2, ch);
cmp(ch1, ch);
cmp(ch2, ch);
strcat(ch1, ch1);
printString(ch1, strlen(ch1));
cmp(ch1, ch);
return 0;
}
/* print
ch : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0123456789와 0123456789 는 같다.
0123456789와 0123456789 는 같다.
ch : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
01234567890123456789와 0123456789 는 다르다.
*/
memcpy
#include <string.h>
void *memcpy(void *dest, const void *src, size_t count);
- src의 count 바이트를 dest로 복사한다.
- 복사가 중첩되는 오브젝트 사이에서는 작동되지 않는다.
- 이 때는 memmove() 사용해야 함
- 문자열 복사 시 사이즈를 조절해서 뒤에 널 문자를 뺄 수도 있다.
Leave a comment