[1] Visual Studio์์
'#define _CRT_SECURE_NO_WARINGS' ๋ฅผ ์ฌ์ฉํ๋ ์ด์
C ์ธ์ด์์ #define _CRT_SECURE_NO_WARNINGS๋ ์ปดํ์ผ๋ฌ์๊ฒ ํน์ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ๋๋ก ์ง์ํ๋ ํ๋ฆฌํ๋ก์ธ์ ์ง์๋ฌธ์ด๋ค. ์ด ์ง์๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ๋ฌ์์ ๋ฐ์ํ๋ "๋ณด์ ๊ฒฝ๊ณ (C4996)" ๋ฉ์์ง๋ฅผ ๋ฌด์ํ ์ ์๋ค.
_CRT_SECURE_NO_WARNINGS๋ฅผ ์ ์ํจ์ผ๋ก์จ ์ปดํ์ผ๋ฌ์์ ๋ฐ์ํ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ๋ ๋์ , ๋ช ๊ฐ์ง ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ์ ๊ฐ์ ๋ณด์ ์ทจ์ฝ์ ์ ๋
ธ์ถ๋ ์ ์๋ค. ์ด ์ง์๋ฌธ์ ํนํ ์ค๋๋ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์ธ scanf, gets, strcpy ๋ฑ์ ์ฌ์ฉํ ๋ ์ ์ฉํ๋ค. ์ด๋ฌํ ํจ์๋ค์ ๋ฒํผ ํฌ๊ธฐ๋ฅผ ํ์ธํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์, ์๋ชป๋ ์
๋ ฅ์ด๋ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ์ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ์ ๊ฐ์ ๋ณด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ๊ธฐ ์ํด _CRT_SECURE_NO_WARNINGS๋ฅผ ์ฌ์ฉํ ๋, ์ปดํ์ผ๋ฌ๋ ํด๋น ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ง ์๊ณ ์ปดํ์ผ์ ์งํํ๋ค. ์ด๋ก์จ ์ฝ๋์ ์ปดํ์ผ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ์ค์ด๋ค๊ณ , ๋ ์ด์ ํด๋น ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ ์ฅ์ ์ด ์๋ค.
๊ทธ๋ฌ๋ ์ด ์ง์๋ฌธ์ ์ฌ์ฉํ ๋ ์ฃผ์ํด์ผ ํ๋ค. ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํจ์ผ๋ก์จ ๋ณด์ ์ทจ์ฝ์ ์ด ์๊ธธ ์ ์์ผ๋ฏ๋ก, ์ฝ๋์ ์์ ์ฑ์ ๊ณ ๋ คํด์ผ ํ๋ค. ๊ฐ๋ฅํ๋ค๋ฉด ๋ณด์ ์ทจ์ฝ์ ์ ํผํ๊ธฐ ์ํด (2)์์ ํ ๋์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ํ, _CRT_SECURE_NO_WARNINGS๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์๋ก๋ถํฐ์ ์
๋ ฅ์ ๊ฒ์ฆํ๊ณ , ๋ฒํผ ์ค๋ฒํ๋ก์ฐ์ ๊ฐ์ ๋ณด์ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ์ ํ ์กฐ์น๋ฅผ ์ทจํด์ผ ํ๋ค.
์์ฝํ์๋ฉด, _CRT_SECURE_NO_WARNINGS๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ๋ฌ์์ ๋ฐ์ํ๋ ๋ณด์ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ ์ ์์ผ๋ฉฐ, ์ฃผ๋ก ์ผ๋ถ ์ค๋๋ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ค์ ์ฌ์ฉํ ๋ ์ ์ฉํ๋ค. ๊ทธ๋ฌ๋ ๋ณด์ ์ทจ์ฝ์ ์ ๋ ธ์ถ๋ ์ ์์ผ๋ฏ๋ก ์ ์คํ๊ฒ ์ฌ์ฉํด์ผ ํ๋ค.
[2] ์ถ๊ฐ ํ์ต
โ๏ธ (1) ๋ณด์ ๊ฒฝ๊ณ (C4996)
"๋ณด์ ๊ฒฝ๊ณ (C4996)"๋ Microsoft Visual Studio ์ปดํ์ผ๋ฌ์์ ๋ฐ์ํ๋ ๊ฒฝ๊ณ ๋ฉ์์ง ์ค ํ๋์ด๋ค. ์ด ๊ฒฝ๊ณ ๋ ๋ณด์ ์ทจ์ฝ์ฑ์ ๊ฐ์ง ํจ์์ ์ฌ์ฉ์ ์๋ฆฌ๋ ์ญํ ์ ํ๋ค.
C4996 ๊ฒฝ๊ณ ๋ ์ค๋๋ C ํ์ค ํจ์๋ค์ด๋ ๋นํ์ค ํจ์๋ค์ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ค. ์ด๋ฌํ ํจ์๋ค์ ๋ณด์ ์ทจ์ฝ์ ์ ๊ฐ์ง๊ณ ์๊ฑฐ๋, ๋ ์์ ํ ๋์ ํจ์๊ฐ ์๋ ๊ฒฝ์ฐ์ด๋ค. ์๋ฅผ ๋ค์ด, scanf, gets, strcpy์ ๊ฐ์ ํจ์๋ค์ ์
๋ ฅ์ ํฌ๊ธฐ๋ฅผ ํ์ธํ์ง ์๊ณ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์, ์๋ชป๋ ์
๋ ฅ์ด๋ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ์ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ ๋ฑ์ ๋ณด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
Microsoft๋ ์ด๋ฌํ ๋ณด์ ์ทจ์ฝ์ฑ์ ์ธ์ํ๊ณ ๊ฐ์ ํ๊ธฐ ์ํด C4996 ๊ฒฝ๊ณ ๋ฅผ ๋์
ํ๋ค. ์ด ๊ฒฝ๊ณ ๋ฅผ ํตํด ๊ฐ๋ฐ์์๊ฒ ํด๋น ํจ์๋ค์ ์ฌ์ฉ์ ์ํํ๋ค๋ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ค๋ค. ๊ฐ๋ฐ์๋ ์ด๋ฌํ ๊ฒฝ๊ณ ๋ฅผ ํ์ธํ๊ณ , ๋ณด์ ์ทจ์ฝ์ฑ์ ๊ฐ์ง ํจ์๋ค์ ๋์ฒดํ ์ ์๋ ์์ ํ ๋์ ํจ์๋ค์ ์ฌ์ฉํ๊ฑฐ๋, ์ ์ ํ ์
๋ ฅ ๊ฒ์ฆ๊ณผ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐฉ์์ ๊ตฌํํด์ผ ํ๋ค.
๋ฐ๋ผ์ #define _CRT_SECURE_NO_WARNINGS๋ฅผ ์ฌ์ฉํ์ฌ _CRT_SECURE_NO_WARNINGS๋ฅผ ์ ์ํ๋ฉด, ์ด ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๋ฌด์ํ๊ณ ํด๋น ํจ์๋ค์ ๊ณ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ํ์ง๋ง ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ๋ฉด์๋ ๋ณด์ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด์๋ ์ฝ๋ ๋ด์์ ์ถ๊ฐ์ ์ธ ๋ณด์ ๊ฒ์ฆ ๋ฐ ์กฐ์น๋ฅผ ์ํํด์ผ ํ๋ค.
์์ฝํ์๋ฉด, "๋ณด์ ๊ฒฝ๊ณ (C4996)"๋ Microsoft Visual Studio ์ปดํ์ผ๋ฌ์์ ์ค๋๋ C ํ์ค ํจ์๋ ๋นํ์ค ํจ์์ ์ฌ์ฉ์ผ๋ก ์ธํ ๋ณด์ ์ทจ์ฝ์ฑ์ ์๋ฆฌ๊ธฐ ์ํ ๊ฒฝ๊ณ ๋ฉ์์ง์ด๋ค. ์ด ๊ฒฝ๊ณ ๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ํด๋น ํจ์๋ค์ ์ฌ์ฉ์ ๊ฒํ ํ๊ณ , ์์ ํ ๋์ ํจ์๋ ๋ณด์ ๊ฒ์ฆ์ ์ ์ฉํด์ผ ํ๋ค. _CRT_SECURE_NO_WARNINGS๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ ์ ์์ผ๋, ๋ณด์์ ๋ํ ์ถ๊ฐ์ ์ธ ์ฃผ์๊ฐ ํ์ํ๋ค.
โ๏ธ (2) ์์ ํ ๋์ ํจ์
C ์ธ์ด์์ ์์ ํ ๋์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด์ ์ทจ์ฝ์ฑ์ ์ํํ๊ณ ์ฝ๋์ ์์ ์ฑ์ ํฅ์์ํค๋ ๋ฐ ๋์์ด ๋๋ค. ์๋์ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์ ๊ทธ์ ๋ํ ์์ ํ ๋์ ํจ์๋ค์ ์ ์ํ๊ฒ ๋ค.
- scanf ๋์ ํจ์: scanf ํจ์๋ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ์ ๊ฐ์ ๋ณด์ ์ทจ์ฝ์ ์ ๊ฐ์ง๊ณ ์๋ค. ๋์ ์ scanf_s ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. scanf_s ํจ์๋ ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ฌ ์์ ํ๊ฒ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ค.
- gets ๋์ ํจ์: gets ํจ์๋ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ์ ๊ด๋ จ๋ ์ฌ๊ฐํ ๋ณด์ ์ทจ์ฝ์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ์ฌ์ฉ์ ํผํด์ผ ํ๋ค. ๋์ ์ fgets ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. fgets ํจ์๋ ์ ๋ ฅ ๋ฌธ์์ด์ ํฌ๊ธฐ๋ฅผ ์ ํํ์ฌ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ฅผ ๋ฐฉ์งํ๋ค.
- strcpy, strcat ๋์ ํจ์: strcpy์ strcat ํจ์๋ ๋์ ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ํ์ธํ์ง ์๊ณ ๋ฌธ์์ด์ ๋ณต์ฌํ๊ฑฐ๋ ์ฐ๊ฒฐํ๊ธฐ ๋๋ฌธ์ ๋ณด์ ์ทจ์ฝ์ ์ ๊ฐ์ง๊ณ ์๋ค. ๋์ ์ strcpy_s, strcat_s ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ฌํ ํจ์๋ค์ ๋์ ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ฌ ์์ ํ ๋ฌธ์์ด ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.
- sprintf, vsprintf ๋์ ํจ์: sprintf์ vsprintf ํจ์๋ ํ์ํ๋ ๋ฌธ์์ด์ ์์ฑํ ๋ ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ํ์ธํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ณด์ ์ทจ์ฝ์ ์ ๊ฐ์ง๊ณ ์๋ค. ๋์ ์ sprintf_s, vsprintf_s ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ฌํ ํจ์๋ค์ ๋์ ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ฌ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ฅผ ๋ฐฉ์งํ๋ค.
์ด ์ธ์๋ ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์ ๋ํด ํน์ ํ ์์ ํ ๋์ ํจ์๊ฐ ์ ๊ณต๋ ์ ์์ผ๋ฉฐ, ํ๋ซํผ์ ๋ฐ๋ผ ๋ค๋ฅผ ์๋ ์๋ค. ๋ฐ๋ผ์ ํด๋น ํ๋ซํผ ๋๋ ์ปดํ์ผ๋ฌ์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ฌ ์์ ํ ๋์ ํจ์์ ๋ํ ์ ๋ณด๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์ข๋ค. ๋ํ, C ์ธ์ด์์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ฌธ์์ด ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์กด์ฌํ๋ฏ๋ก, ํน์ ํ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ ์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ์ฌ ์ฌ์ฉํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
https://learn.microsoft.com/ko-kr/cpp/c-runtime-library/security-features-in-the-crt?view=msvc-170
[3] ๋๋ ์
โ๏ธ ๊ธ์ ์ด ์ด์ : ์ฌ๋ฆ๋ฐฉํ๋์ ํ๊ต ์น๊ตฌ๋ค๊ณผ ์๋ฐ์ ์ผ๋ก ์งํํ๋ 'C์ธ์ด study' ์์๋ C์ธ์ด๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ๋ณต์ตํ๊ธฐ๋ก ํ๋ค. ์ํ์ ๋์ค๋ ๋ด์ฉ(์ฃผ๋ก ๋ฌธ๋ฒ์ ์ธ ๋ด์ฉ๋ค)๋ง ๊ณต๋ถํ๊ธฐ ๋ฐ๋นด๋ ํ๊ธฐ ์ค์ผ ๋์๋ ๋ฌ๋ฆฌ ๋ ์ฌ์ ๋กญ๊ฒ C์ธ์ด๋ฅผ ๊ณต๋ถํ ์ ์์ด์, '#define _CRT_SECURE_NO_WARNINGS' ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ๋ํด ์์ธํ ์ฐพ์๋ณด์๋ค.
โ๏ธ Microsoft ๊ณต์ ํํ์ด์ง์์ ์์ธํ ์ค๋ช ๋ ์ฐพ์๋ณด์๋ค.
โ๏ธ ๋ณด์์ ์ทจ์ฝ์ ์๋ ์ ๋ง ๋ค์ํ ์ข ๋ฅ๊ฐ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๋ค์์๋ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ์ ๋ํด์๋ ๊ธ์ ์ธ ์์ ์ด๋ค.
โ๏ธ scanf_s ๊ณผ ๊ฐ์ด ๋ค์ ๋ถ๋ _s ๊ฐ ("secure") ์ ๋ฏธ์ฌ๋ผ๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
โ๏ธ ์ดํด๋ฅผ ํ๊ณ ์ฌ์ฉํ๋๊น ๋ ํฅ๋ฏธ๊ฐ ๋๊ปด์ง๊ณ ์ ์ ์์ ๊ฒ ๊ฐ๋ค!
'1ํ๋ (2023) > C ์ธ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C] Study mini project_1์ฃผ์ฐจ: ์กฐ๊ฑด๋ฌธ (0) | 2023.07.10 |
---|---|
[C] C Study mini project_1์ฃผ์ฐจ: ์์๊ณผ ์ฐ์ฐ์ (0) | 2023.07.10 |
[C] scanf ์ฌ์ฉ๋ฒ (0) | 2023.07.08 |
[C] <stdlib.h> ๋? (0) | 2023.07.08 |
[C] <stdbool.h> ๋? (0) | 2023.07.08 |