Knowledge/C++
comparison between signed and unsigned integer expressions 원인 및 해결 방법
TakeKnowledge
2019. 7. 16. 14:07
반응형
이 역시 위 포스팅과 같이 BOJ 8958번 문제 ( https://www.acmicpc.net/problem/8958 ) 를 풀면서 알게된 것
strlen()을 활용해 문제 풀고 맞았습니다 판정까지 받았지만
1
2
3
4
|
Main.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 획득!
참조
반응형