scanf_s() 사용시 입력받은 문자가 제대로 출력 안되는 문제발생!
VS 2005이후부터 scanf가 아니라 scanf_s를 써야 하는거였군... 바보가 된 느낌 ㅋㅋㅋ 그래도 사용법을 알았으니 다행이다 ㅎㅎ
scanf("%s", buffer)에서는 예시처럼 변환명세와 저장할 변수명을 써주면 되고
scanf("%s", buffer, sizeof(buffer))에서는 세번째 인자(parameter)로 버퍼 크기를 입력해줘야 한다.
scanf 가 버퍼 크기를 고려하지 않고 입력 받는것때문에 scanf_s에서는 버퍼의 크기까지 인자로 받아서 동작하는것 같다. 아무래도 보안문제로 scanf를 안쓴다고 오류가 뜨니까 오버플로우같은걸 이용한 공격에 대비하기위해서인듯
Visual Studio 2012에서 과제하다가 scanf()사용시 나온 오류 메시지:
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\stdio.h(290) : 'scanf' 선언을 참조하십시오.
무작적 scanf_s로 바꿔서 컴파일하니 컴파일은 되는데 제대로된 출력이 안나와서 디버거로 확인해보니 입력값이 깨져서 들어가있다. 한참 삽질하다가 연구실 후배 영근이 인터넷 검색해보라하니 바로 나왔다...-.-; 나는 바보로구나 ㅋㅋㅋ
참고 싸이트 http://alisa2304.tistory.com/106
덧.
sizeof와 비슷한 _countof 라는게 존재한는군
sizeof 는 데이터 크기를
_countof는 배열이 선언된 갯수를 나타낸다.
즉 char buffer[10]이라는 변수가 있을때
sizeof(buffer)는 2바이트*10 = 20 (byte)를 뜻하고
_countof(buffer)는 배열의 갯수인 10을 나타낸다.!!
http://msdn.microsoft.com/en-us/library/ms175773.aspx
'Technology > C & C++' 카테고리의 다른 글
[C/C++]static 선언 (0) | 2022.08.01 |
---|---|
[C++]C코드에서 C++ 코드 호출하다가 참조자공부 (0) | 2022.05.10 |
[C/C++]포인터 매개변수로 메모리 제어 (0) | 2022.04.23 |
[c언어 기초] 이것이 C언어다 [0] (0) | 2015.07.18 |
[C언어 기초] 컴퓨터 과학 및 실습 (1) (0) | 2014.03.11 |