* 파라미터로 받은 문자열 s에서 c를 검색하는 함수.
* 문자 c가 존재하면 해당 문자가 존재하는 곳의 포인터를 반환, 존재하지 않으면 NULL을 반환하는 함수.
char *ft_strchr(const char *s, int c)
const char *s : 문자 c를 검색할 문자열 s
int c : 문자열에서 검색할 문자. 정수로 인자를 받고 아스키 코드상 문자로 쓰인다.
검색할 문자 c는 int로 주어지기 때문에 unsigned char
로 형변환하여 검색한다.
--> char로 형변환하지 않는 이유는, 특정 아키텍쳐 cpu를 사용하는 환경에서는 unsigned char
가 디폴트이다.
이러한 환경에서 char을 사용했을 때 unsigned char로 바뀌어 적용된다.
이렇듯 char을 이용했을 때 환경마다 다르게 동작
할 수 있기 때문에 관례상 unsigned char을 이용한다.
검색할 문자 c가 '\0'일 때는 s[index]가 '\0'일 때도 검색해야 함에 주의한다.
#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);
}
(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을 리턴한다.