본문 바로가기
언어/C | C++

[C언어/초보를위한] 문자열을 복사하는 strcpy, strncpy 함수 구현하기

by 만결숭이 2022. 6. 4.
반응형

strcpy 함수 구현 코드

char	*strcpy(char *dest, char *src)
{
	int	i;

	i = 0;
	while (src[i])
	{
		dest[i] = src[i];
		i++;
	}
	dest[i] = src[i]; //'\0'
	return (dest);
}

strcpy 함수 : dest 문자열에 src 문자열을 복사 해 넣는 함수

src : 복사할 문자열

dest : 붙여넣을 문자열

 

while 문을 해석하자면,

src[0]에서부터 마지막 문자까지 한 문자씩 dest[i]에 복사된다.

while 문은 조건이 null일때 종료되고,

src 문자열의 마지막에는 항상 '\0'인 null 문자가 있기 때문에

마지막 문자까지만 복사가 되고 while 문이 종료된다.

 

여기서 끝이 아니라, dest 문자열의 끝을 알려주는 '\0' 이 필요하다.

while 문이 끝난 시점에서의 src[i]는  '\0'을 담고 있으므로 그걸 dest[i]에 똑같이 넣어 준 것이다.

이 때 그냥 dest[i] = '\0' 이라고 직접 넣어주어도 무관하다.

 

 

 

 

반응형

strncpy함수 구현 코드

char	*strncpy(char *dest, char *src, unsigned int n)
{
	unsigned int	i;

	i = 0;
	while ((src[i] != '\0') && (i < n)) // (src[i] && (i < n)) 도 무관
	{
		dest[i] = src[i];
		i++;
	}
	while (i < n)
	{
		dest[i] = '\0';
		i++;
	}
	return (dest);
}

strncpy 함수 : dest 문자열에 src 문자열을 n의 길이만큼 복사 해 넣는 함수

src : 복사할 문자열

dest : 붙여넣을 문자열

n : 복사할 문자열의 길이

 

전체적인 코드의 흐름은 위의 strcpy 함수와 거의 비슷하다.

다른 점은,

while 문에서 (i < n) 조건을 추가해줌으로써 n 만큼만 반복문이 실행되도록 하는 것이다.

 

두 번째 while 문을 쓴 이유는

n이 src 문자열의 길이보다 더 클 때,

남은 길이만큼 널문자로 채우기 위해서이다.

반응형

댓글