1 minute read

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