-
comparison between signed and unsigned integer expressions 원인 및 해결 방법Knowledge/C++ 2019. 7. 16. 14:07반응형
이 역시 위 포스팅과 같이 BOJ 8958번 문제 ( https://www.acmicpc.net/problem/8958 ) 를 풀면서 알게된 것
strlen()을 활용해 문제 풀고 맞았습니다 판정까지 받았지만
1234Main.cc: In function ‘int main()’:Main.cc:19:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]for(int j=0; j<strlen(cArr); j++){~^~~~~~~~~~~~~cs 위와 같은 경고문이 코드 아래에 붙어있었다.
찾아보니 이는 부호 있는 정수와 부호 없는 정수를 비교할 때 발생하는 경고문이고
int는 기본적으로 signed int (부호 있는 정수)인데 strlen()이 리턴하는 값은 unsigned int(부호 없는 정수)이기에
둘을 비교하는 부분에서 해당 에러가 발생한 것이다.
해결법은 간단히 캐스팅을 해주면된다
- signed int를 unsigned int로 바꾸려면
signed int 앞에 (unsigned int)를 붙이면 된다. 위 코드로 에를 들자면
(unsigned int)j < strlen(cArr) 하면 해결
- unsigned int를 signed int로 바꾸려면
unsigned int 앞에 (int)를 붙이면 된다. 위에서도 적었듯 int는 기본적으로 signed int이기 때문. 이 역시 위 코드로 보면
j < (int)strlen(cArr) 하면 해결
아무튼 그렇다. 나는 아래 방법으로 수정해서 깔끔한 AC 획득!
참조
반응형'Knowledge > C++' 카테고리의 다른 글
C++ sizeof() 함수와 strlen()의 차이 (1) 2019.07.16 C++ 변수 여러개를 선언과 동시에 초기화 할 때 주의할 점 (0) 2019.07.16 C++ 최소값과 최대값을 구하는 함수 (0) 2019.07.16 C++ EOF 처리 방법 ( 백준 10951 A+B - 4 ) (6) 2019.07.11 문자열을 출력하고 줄을 바꿔주는 puts() 함수 (0) 2019.07.08