함수 int compare (...)은 두 문자열이 인 경우를 제외하고 대/소문자를 제외한 모든 문자를 확인합니다. "a? ...! b"는 "ab"와 같습니다. 같으면 1을 반환하고, 그렇지 않으면 0을 반환합니다. 그러나 내 코드에는 버그가 있습니다! 나는 시도하고 예를 들어,이 코드를 실행하면두 문자열의 순차 비교
int compare(const char* string1, const char* string2)
{
if(string1 == NULL || string2 == NULL)
return 0;
std::cout << *string1 << " | " << *string2 << std::endl;
if((!isalpha(*string1) && *string1 != ' ') && (!isalpha(*string2) && *string2 != ' '))
{
compare(++string1,++string2);
}
else if(!isalpha(*string1) && *string1 != ' ')
{
compare(++string1,string2);
}
else if(!isalpha(*string2) && *string2 != ' ')
{
compare(string1, ++string2);
}
if(tolower(*string1) != tolower(*string2))
return 0;
if(*string1 == '\0')
return 1;
if(*string1 == *string2)
compare(++string1, ++string2);
}
는 :
compare("a !!!b", "a b");
출력은 정말 날 혼란 : 그것은 0을 반환 (같지 않음)
a | b
|
! |
! |
! |
b | b
^@| ^@
| a
^@| ^@
| a
. 일단 도달하면 실행을 멈추지 않습니다 b | b, 이유가 무엇입니까?
당신은 compare''에 대한 각 호출하기 전에'return'을 둘 필요가 그렇지 않은 경우, 두 문자열이 비어 및 이전 버전 기능에 따라서 동일한 경우, 당신은 확인해야 그것은 재귀 적으로'compare'를 호출 할 것이지만 그때 함수를 계속 실행합니다. –
'char' 값을 가진''함수를 사용하면'char' 값이 음수 일 때 정의되지 않은 동작이 일어납니다. 'char' 값을 ''의 함수 중 하나에 전달하기 전에'unsigned char'로 형변환해야합니다. –
@JohnnyMopp에 언급 된 것 외에도 함수의 마지막에는 return 문이 없습니다. return 문없이'void'와 다른 무언가를 반환하는 함수의 끝에서 떨어지는 것은 정의되지 않은 동작입니다. –