strchr()
구현을 작성하려고했습니다.두 번째 인수가 작은 따옴표 ('text') 문자열 인 경우 strchr이 NULL을 반환하지 않는 이유
char *ft_strchr(const char *s, int c)
{
(unsigned char)c;
while (*s)
{
if (*s == c)
return ((char *)s);
s++;
}
if (c == '\0')
return ((char *)s);
return (NULL);
}
그것은이를 제외한 대부분의 경우 유사한 작동합니다
printf("%s\n", strchr("Whats up with you, men", ' up'));
strchr
반환
p with you, men
동안 저 버전 ft_strchr
반환
NULL
내가 궁금 이유 strchr
어느쪽으로 든 행동합니다. ' up'
을 unsigned char
으로 변환하면 'p'(int
538998128)가됩니다.
또한 여기에서는 다른 구현을 발견했으며이 데이터에서도 strchr으로 작동합니다.
char *ft_strchr(const char *s, int c) {
while (*s != (unsigned char) c) {
if (!*s)
return NULL;
s++;}
return (char *)s;
}
또한 내 버전이 다른 나는 그들이 유사한 작동합니다 생각하지만 그들은하지 않습니다. 왜 진짜 관심 있니?
미리 감사드립니다. 이 식에서
'(unsigned char) c;'는 한 줄에'c'의 형식을 변경하지 않지만 여전히'int'입니다. –
''up ''을 여러 문자로 전달하지만, 비교할 때 하나의 문자로 취급합니다. 실제로 1 문자 이상을 검색하려는 경우 문제가 발생합니다. 컴파일러가 하나 이상의 문자를 포함하는 문자 리터럴을 구현 정의로 처리하는 방법을 알아야합니다. 아마도 컴파일러는 마지막 'p'또는 다중 문자 리터럴의 첫 번째 공백 만 유지합니다. – nos
@nos 감사합니다. 이해합니다. 테스트 사례 일뿐입니다. 문제는 캐스팅이 잘못되었습니다 (표현식에 있어야 함). –