@yLaguardia 잘 주문 문제.
int strcmp(const char *s1, const char *s2);
는 strcmp
함수 문자열 s1
가리키는 따라서 같은 문자열이 s2
가 가리키는 것보다보다 같거나 작 정수,보다 같거나 0보다 작은 반환 . 3
uint8_t
를 사용 C11dr §7.24.4.2는 대부분의 경우에 괜찮습니다. 희귀 기계는 8 비트 char
을 사용하지 않으므로 uint8_t
을 사용할 수 없습니다. 어떤 경우 든 unsigned char
이 필요한 을 처리해야하므로 필요하지 않습니다.을 비교하십시오. (부호없는 비교에 대해서는 아래를 참조하십시오.)
int result1 =
((unsigned char)*str1 - (unsigned char)*str2);
더 높은 휴대용 코드를 처리하기 위해 다음을 사용하는 경우 char
범위와 unsigned
범위 일치뿐만 아니라 다른 모든 char, unsigned char, int, unsigned
크기/범위.
strcmp()
int result1 =
((unsigned char)*str1 > (unsigned char)*str2) -
((unsigned char)*str1 < (unsigned char)*str2);
는
char
서명 또는 서명되지 않은 경우에 관계없이,
unsigned char
각 문자의 치료로 정의됩니다.
... 각 문자는이 유형 unsigned char
했다 것처럼 char
가 ASCII 일해야 ... C11 §7.24.1 3
해석 여부를 관련이 없습니다하여야한다 strcmp()
의 코딩. 물론 다른 문자 인코딩에서 다른 결과가 발생할 수 있습니다. 예 : strcmp("A", "a")
은 인코딩이 하나 뿐인 긍정 응답 (거의 사용되지 않고 EBCDIC)이 될 수 있지만 다른 인코딩에서는 음수 (ASCII)가됩니다.
왜 'str1 + = 1'이 아닌'str2 ++'을 사용하고 있습니까? 또한'str2'가'str1'보다 짧을 가능성을 검사하지 않습니다. –
코드를 변경하지 마십시오. 실제 코드에'str1 ++'또는'str1 + = 1'이 있습니까? –
테스트 후 변경을 잊어 버렸습니다. 내 코드는 str1 ++입니다. – Parket