프로젝트 & 과제/3학년

[C언어] 포인터로 문자열 복사

qqlzzb 2022. 2. 5. 22:46

개요

프로그래밍 언어 : C언어

과제 수행 날짜 : 2020.11.13

과제 개요 : 2개의 문자열이 있을 때, 입력받은 수만큼 한 문자열에서 문자를 복사하여 다른 문자열에 붙여넣기

 

코드

#include <stdio.h>
char* strNcpy(char* s1, char* s2, char n)
{
	char *tmp = s1;
	int c = 0; // s1의 길이를 구하기 위한 변수
	char a = 0, b = 0; // 문자열에 접근하기 위한 인덱스
	while (s1[a++] != 0) c++;
	if ((c + 1 == n) && (s2[n] != 0)) return "error"; // 두 번째 예외
	a = 0;
	
	for (char k = 0; k < n; k++)
	{
		if (s1[a] == 0)
		{
			return "error"; // 세 번째 예외
		}
		s1[a++] = s2[b++]; //인덱스를 증가시키면서 s2를 s1에 복사
	}
	
	return tmp;
}

int main()
{
	char s1[] = "abcd", s2[] = "1234567";
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) // 첫 번째 예외
	{
		if (s2[i] == 0)
		{
			printf("error");
			return 0;
		}
	}
	printf("%s", strNcpy(s1, s2, n));
}

결과

s2에서 3개를 복사하려고 하므로 123이 s1에 복사되어 저장된다. 따라서 123defg가 s1에 저장된다.

 

s2에서 5개를 복사하려고 하므로 123 4까지 복사되어 s1에 저장된다. 따라서 123 4fg가 s1에 저장된다.

 

tmp가 main 함수에서 넘어온 s1을 가리키도록 한 후에 s1에 s2를 복사한다. 복사 과정이 다 끝난 후에 tmp를 반환하여 tmp가 가리키는 문자열을 출력하고, 만약 예외 처리에 의해 오류로 판단된 경우 error를 출력한다.

 

- 예외