개발 일지/프로그래밍 언어(Java, C, SQL)

[혼공C] string.h 헤더파일 내장 함수 구현(strlen, strncpy, strncat, strcpy)

jayoon 2021. 10. 9. 01:53

문제를 풀면서 함수를 살펴 보겠습니다.

 

<문제>

키보드로 입력한 단어의 길이가 5자를 넘는 경우 6자부터 별(*)을 출력하는 프로그램을 작성합니다. 단어의 최대 길이는 15자로 제한합니다. (실행창에 출력되는 결과는 제가 작성한 main 함수를 참고해주세요)

#include <stdio.h>

int	ft_strlen(char *str)
{
	int	size;

	size = 0;
	while (*str != '\0')
	{
		size++;
		str++;
	}
	return (size);
}

char	*ft_strncpy(char *dest, char *src, unsigned int size)
{
	char	*po;
	int		count;

	count = 0;
	po = dest;
	while (*src != '\0' && size > count)
	{
		*dest++ = *src++;
		count++;
	}
	return (po);
}

char	*ft_strncat(char *dest, char *src, unsigned int size)
{
	char	*po;
	unsigned int	count;

	count = 0;
	po = dest;
	while (*dest != '\0')
	{
		dest++;
	}
	while (*src != '\0' && size > count)
	{
		*dest++ = *src++;
		count++;
	}
	*dest = '\0';
	return (po);
}

char	*ft_strcpy(char *dest, char *src)
{
	char	*po;

	po = dest;
	while (*src != '\0')
	{
		*dest++ = *src++;
	
	}
	*dest = '\0';
	return (po);
}

int	main(void)
{
	char	str[15];
	char	res[15];
	char	*star = "**********";
	int		size;

	printf("input : ");
	scanf("%s", str);
	size = ft_strlen(str);
	if (size > 5)
	{
		ft_strncpy(res, str, 5);
		res[5] = '\0';
		ft_strncat(res, star, size - 5);
	}
	else
		ft_strcpy(res, str);
	printf("not changed words : %s, changed words : %s\n", str, res);
	return 0;
}