#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[])
{
int i;
char str[15];
gets(str);
i = atoi(str);
printf("str=%s\n",str);
printf("i=%d\n",i);
return 0;
}
str의 크기가 15면 15자리까지 gets();할 수 있을줄 알았는데 14자리까지만 입력이 받아지고 그 이상입력하면 에러가 나,,
그리고 int형 최대값인 2147483647을 넘은 값을 입력하면 오버플로우되야되는거 아니야? 2147483647만 출력되는데ㅠㅠ
C 의 string 은 NULL terminated string 이다. 찾아봐.
"gets();할 수 있을줄 알았는데 14자리까지만 입력이 받아지고 그 이상입력하면 에러가 나,," 입력할 때 마지막에 엔터를 치지 않슴? 엔터가 \n 문자로 되어서 문장의 끝을 나타내게 됨. 따라서 크기가 15면 14+\n 이렇게 들어감
오버플로우 안되는건 뭐때문이에요?
일단 모든 문자열의 마지막에는 NULL문자가 들어있습니다. 문자열의 끝을 알려주는 문자죠. 때문에 15크기의 배열에는 14문자 + NULL문자"자가 들어가게 됩니다. 15자를 입력하게되면 오류가 나겠죠. 그리고 atoi경우 내부 동작에 대해 자세히 모르지만 대충 짐작해본다면 인자로 들어온 문자열을 정수로 변환할때 표현범위를 초과하면 아마 표현범위내에서의 최소 또는 최대값을 반환하는 듯 합니다. 따라서 오버플로우랑 상관없이 atoi()내부에서 적절히 조절해 주는 것 이라고 생각합니다.
2147483648이라고 치면 -2147483648로 안나옴?
내 위엣사람 말이 좀더 섬세하군
네
"abcd" = 'a', 'b','c','d', null = 배열 5자리 필요.