본문 바로가기
42Seoul/libft

ft_strjoin

by 하고싶은건많은놈 2023. 2. 16.

strjoin?

//원 함수 없음
    char *ft_strjoin(char const *s1, char const *s2);

구현해야할 함수 기능

: Allocates (with malloc(3)) and returns a new string, which is the result of the concatenation of ’s1’ and ’s2’.

해석 및 부연설명

: 문자열 s1과 s2를 합한 문자열을 새롭게 할당하여 반환한다. 할당 실패시에서는 NULL을 반환한다.

ex)

char	str1[] = "abcdefg";
char	str2[] = "hijklmnop";
printf("%s\n", ft_strjoin(str1, str2));

코드 실행 결과

abcdefghijklmnop

str1과 str2가 이어진 새로운 문자열이 정상적으로 만들어졌다.

의문점 및 생각해볼점

  1. strcat과의 차이점

strcat과는 무엇이 다른가

strcat도 문자열 dst 뒤에 src를 붙이는 것이므로 비슷하다고 볼 수 있지만, 결정적으로 strcat은 원본 dst에 src를 더하는 과정이지만 strjoin은 아예 새로운 문자열을 만들어낸다는 차이점이 있다.


ft_strjoin 구현

char	*ft_strjoin(char const *str1, char const *str2)
{
	char	*result;
	char	*joinstr;
	int		joinstr_len;

	joinstr_len = ft_strlen(str1) + ft_strlen(str2);
	joinstr = (char *)malloc((joinstr_len + 1) * sizeof(char));
	result = joinstr;
	if (!joinstr)
		return (NULL);
	while (joinstr_len-- > 0)
	{
		if (*str1)
			*joinstr = *str1++;
		else if (*str2)
			*joinstr = *str2++;
		joinstr++;
	}
	*joinstr = 0;
	return (result);
}

str1과 str2의 길이 합 + 맨 뒤 NUL을 넣어줄 크기까지 할당을 한 후, 순서대로 str1과 str2의 문자들을 받아와 채운다.

'42Seoul > libft' 카테고리의 다른 글

ft_split  (0) 2023.02.16
ft_strtrim  (0) 2023.02.16
ft_substr  (0) 2023.02.16
ft_strrchr  (0) 2023.02.16
ft_strnstr  (0) 2023.02.16

댓글