ft_strchr 구현

yeonjkim·2021년 5월 24일
0

42seoul-libft

목록 보기
24/43

1. ft_strchr 용도

* 파라미터로 받은 문자열 s에서 c를 검색하는 함수.

* 문자 c가 존재하면 해당 문자가 존재하는 곳의 포인터를 반환, 존재하지 않으면 NULL을 반환하는 함수.

2. ft_split 프로토타입

char	*ft_strchr(const char *s, int c)
const char *s : 문자 c를 검색할 문자열 s
int c : 문자열에서 검색할 문자. 정수로 인자를 받고 아스키 코드상 문자로 쓰인다.

3. 구현 시 유의사항

  • 검색할 문자 c는 int로 주어지기 때문에 unsigned char로 형변환하여 검색한다.
    --> char로 형변환하지 않는 이유는, 특정 아키텍쳐 cpu를 사용하는 환경에서는 unsigned char가 디폴트이다.
    이러한 환경에서 char을 사용했을 때 unsigned char로 바뀌어 적용된다.
    이렇듯 char을 이용했을 때 환경마다 다르게 동작할 수 있기 때문에 관례상 unsigned char을 이용한다.

  • 검색할 문자 c가 '\0'일 때는 s[index]가 '\0'일 때도 검색해야 함에 주의한다.

4. 코드 구현

#include "libft.h"

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

        index = 0;
        while (s[index] != '\0')
        {
                if ((unsigned char)c == s[index])
                {
                        return ((char*)(&s[index]));
                }
                index++;
        }
        if ((unsigned char)c == s[index])
        {
                return ((char*)(&s[index]));
        }
        return (NULL);
}

5. 코드 구현 방법

(1) s[index]가 '\0'이 아닐 때까지 s[index]가 c인지 검색한다.
(2) s[index] == (unsigned char)(c)라면 s의 주소를 반환하되, s는 const char 형이므로 (char)형으로 형변환해 반환한다.
(3) c가 '\0'일 경우에 s[index] == '\0'일 때도 비교해야 하므로 추가로 비교해 준다.
(4) c를 검색하지 못했을 경우 NULL을 리턴한다.

0개의 댓글