728x90
반응형

이번 함수들은 문자열과 관련된 함수들이다.

ft_strchr: 문자열 s에서 문자 c를 찾아 그 위치를 반환해주는 함수

char	*ft_strchr(const char *s, int c)
{
	int	i;

	i = 0;
	while (i < (int)ft_strlen(s) + 1)
	{
		if (s[i] == (char)c)
			return ((char *)s + i);
		i++;
	}
	return (NULL);
}

 

ft_strdup: 문자열 s를 복사한 문자열을 반환해주는 함수

새 문자열에 s의 길이 + 1 만큼 할당해주고 s를 그대로 복사해주면 된다. 마지막에 null을 넣어주는 것을 잊지 말자!

char	*ft_strdup(const char *s)
{
	char	*str;
	int		i;
	int		slen;

	i = 0;
	slen = (int)ft_strlen(s);
	if (!(str = (char *)malloc(sizeof(*s) * (slen + 1))))
		return (NULL);
	while (s[i])
	{
		str[i] = s[i];
		i++;
	}
	str[i] = '\0';
	return (str);
}

 

ft_strjoin: 두 문자열을 s1, s2를 합친 문자열을 반환해주는 함수

새 문자열에 s1의 길이 + s2의 길이 + 1 만큼 할당해주고, s1과 s2를 순서대로 복사해주면 된다. 

마지막에 null을 넣어주는 것을 잊지 말자!

char	*ft_strjoin(char const *s1, char const *s2)
{
	char	*str;
	int		i;
	int		j;
	int		s1_len;
	int		s2_len;

	i = 0;
	j = 0;
	if (s1 == 0 || s2 == 0)
		return (NULL);
	s1_len = (int)ft_strlen(s1);
	s2_len = (int)ft_strlen(s2);
	if (!(str = (char *)malloc(sizeof(char) * (s1_len + s2_len + 1))))
		return (NULL);
	while (i < s1_len)
	{
		str[i] = s1[i];
		i++;
	}
	while (j < s2_len)
		str[i++] = s2[j++];
	str[i] = '\0';
	return (str);
}

 

ft_strlcat: 문자열 dst에 문자열 src를 이어 붙이고, 그 길이를 반환하는 함수

dest의 길이가 size보다 크면 size + src의 길이를 반환하고

dest의 길이가 size보다 크지 않으면 dest의 길이 + src길이를 반환해주면 된다.

size_t	ft_strlcat(char *dst, const char *src, size_t size)
{
	size_t	i;
	int		j;
	size_t	k;

	i = ft_strlen(dst);
	j = 0;
	if (size < i)
		k = size;
	else
		k = i;
	while (src[j] && i < size - 1 && size != 0)
		dst[i++] = src[j++];
	while (src[j] != '\0')
		j++;
	dst[i] = '\0';
	return (k + j);
}

 

ft_strlcpy: size만큼 문자열 src를 문자열 dst에 복사하고, src의 크기를 반환해주는 함수

src를 size만큼만 복사해주면 된다.

strlcat 함수도 그렇고 복사해준 src의 길이가 아니라 src의 크기 그 자체를 반환하는 게 조금 아이러니한 것 같다.

size_t	ft_strlcpy(char *dst, const char *src, size_t size)
{
	size_t	i;
	size_t	src_len;

	i = 0;
	if (dst == 0 || src == 0)
		return (0);
	src_len = ft_strlen(src);
	if (size > 0)
	{
		while (i < (size - 1) && src[i])
		{
			dst[i] = src[i];
			i++;
		}
		dst[i] = '\0';
	}
	return (src_len);
}
728x90
반응형

+ Recent posts