백준의 10988 번을 풀어보았다.
그동안 너무 C++만 사용하여서 오랜만에 C로 풀어보았는데 막히는 부분이 있었다.
내가 처음에 썼던 코드는 이러하다.
#include <stdio.h>
#include <string.h>
int main() {
char string[101];
scanf("%c", &string);
int i, k=1 ;
for (i = 0; i < (sizeof(string)-1) / 2; i++) {
if (string[i] != string[sizeof(string) - 2 - i]) {
k = 0;
break;
}
}
printf("%d", k );
return 0;
}
에러가 뜨는 것은 아니지만 자꾸 다른 답이 나오길래 고민을 해보았다.
문자열의 길이를 셀 때 sizeof에서 1을 빼는 방식으로 세왔는데, 그전까지 그 방법이 잘 작동했던 이유는 애초에 초기화 당시 문자열을 할당했기 때문이었다...
나는 내가 string 배열에 101칸의 메모리를 할당해놓고 계속 sizeof로 문자열 길이를 세는 멍청한 짓을 하고 있었던 것이다ㅏ....
그리고 문자열임에도 변환문자로 %c를 사용한 점 또한 문제였다.
그래서 %c->%s로 고치고 sizeof를 모두 strlen으로 바꿔주었더니 정상작동하는 것을 볼 수 있었다.