1ν•™λ…„ (2023)/C μ–Έμ–΄ 26

[C] C Study mini project_1μ£Όμ°¨: μˆ˜μ‹κ³Ό μ—°μ‚°μž

[1] 문제 문제 μ„€λͺ… μ‚¬μš©μžλ‘œλΆ€ν„° 2개의 μ •μˆ˜λ₯Ό μž…λ ₯λ°›μ•„μ„œ 첫 번째 μ •μˆ˜λ₯Ό 두 번째 μ •μˆ˜λ‘œ λ‚˜λˆ„μ—ˆμ„ λ•Œμ˜ λͺ«κ³Ό λ‚˜λ¨Έμ§€λ₯Ό κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λΌ. μž…μΆœλ ₯ μ˜ˆμ‹œ [2] μ •λ‹΅ μ½”λ“œ HTML μ‚½μž… 미리보기할 수 μ—†λŠ” μ†ŒμŠ€ μ½˜μ†” μ°½ [3] 해석 HTML μ‚½μž… 미리보기할 수 μ—†λŠ” μ†ŒμŠ€ [4] 풀이 및 μ˜€λ‹΅ βœ”οΈ %d, %f, %c λ“± ν˜•μ‹ μ§€μ •μžλ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” ν•΄λ‹Ή λ³€μˆ˜μ˜ μ£Όμ†Œ(&)λ₯Ό ν•¨κ»˜ 전달해야 ν•œλ‹€λŠ” 사싀을 μžŠμ–΄μ„œ λΉŒλ“œ 였λ₯˜κ°€ λ‚¬μ—ˆλ‹€. scanf μ‚¬μš©λ²• 글도 λ”°λ‘œ μΌλŠ”λ° 또 μ‹€μˆ˜ν•΄μ„œ λ‹΅λ‹΅ν•˜λ‹€. βœ”οΈ νŒŒμ΄μ¬μ΄λž‘ ν—·κ°ˆλ €μ„œ ;(μ„Έλ―Έμ½œλ‘ ) λΆ™μ—¬μ£ΌλŠ” κ±Έ λΉ νŠΈλ¦°λ‹€... [5] μΆ”κ°€ ν•™μŠ΅ ✏️ scanf μ‚¬μš©λ²•: https://exponent.tistory.com/43 [C] scanf μ‚¬μš©λ²• C μ–Έμ–΄μ—μ„œ scan..

[C] Visual Studioμ—μ„œ '#define _CRT_SECURE_NO_WARINGS' λ₯Ό μ‚¬μš©ν•˜λŠ” 이유

[1] Visual Studioμ—μ„œ '#define _CRT_SECURE_NO_WARINGS' λ₯Ό μ‚¬μš©ν•˜λŠ” 이유 C μ–Έμ–΄μ—μ„œ #define _CRT_SECURE_NO_WARNINGSλŠ” μ»΄νŒŒμΌλŸ¬μ—κ²Œ νŠΉμ • κ²½κ³ λ₯Ό λ¬΄μ‹œν•˜λ„λ‘ μ§€μ‹œν•˜λŠ” ν”„λ¦¬ν”„λ‘œμ„Έμ„œ μ§€μ‹œλ¬Έμ΄λ‹€. 이 μ§€μ‹œλ¬Έμ„ μ‚¬μš©ν•˜λ©΄ μ»΄νŒŒμΌλŸ¬μ—μ„œ λ°œμƒν•˜λŠ” "λ³΄μ•ˆ κ²½κ³ (C4996)" λ©”μ‹œμ§€λ₯Ό λ¬΄μ‹œν•  수 μžˆλ‹€. _CRT_SECURE_NO_WARNINGSλ₯Ό μ •μ˜ν•¨μœΌλ‘œμ¨ μ»΄νŒŒμΌλŸ¬μ—μ„œ λ°œμƒν•˜λŠ” κ²½κ³ λ₯Ό λ¬΄μ‹œν•˜λŠ” λŒ€μ‹ , λͺ‡ 가지 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 버퍼 μ˜€λ²„ν”Œλ‘œμš°μ™€ 같은 λ³΄μ•ˆ 취약점에 λ…ΈμΆœλ  수 μžˆλ‹€. 이 μ§€μ‹œλ¬Έμ€ 특히 였래된 C 라이브러리 ν•¨μˆ˜μΈ scanf, gets, strcpy 등을 μ‚¬μš©ν•  λ•Œ μœ μš©ν•˜λ‹€. μ΄λŸ¬ν•œ ν•¨μˆ˜λ“€μ€ 버퍼 크기λ₯Ό ν™•μΈν•˜μ§€ μ•Šκ³  데이터λ₯Ό μ²˜λ¦¬ν•˜κΈ° λ•Œλ¬Έμ—, ..

[C] scanf μ‚¬μš©λ²•

C μ–Έμ–΄μ—μ„œ scanf ν•¨μˆ˜λŠ” ν‘œμ€€ μž…λ ₯μœΌλ‘œλΆ€ν„° 값을 μ½μ–΄μ™€μ„œ λ³€μˆ˜μ— μ €μž₯ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. scanf ν•¨μˆ˜μ˜ 기본적인 μ‚¬μš©λ²•μ€ λ‹€μŒκ³Ό κ°™λ‹€: HTML μ‚½μž… 미리보기할 수 μ—†λŠ” μ†ŒμŠ€ μœ„μ˜ μ˜ˆμ œμ—μ„œ scanf ν•¨μˆ˜λŠ” 각각 μ •μˆ˜, μ‹€μˆ˜, 문자λ₯Ό μž…λ ₯λ°›μ•„ λ³€μˆ˜μ— μ €μž₯ν•˜κ³  좜λ ₯ν•˜λŠ” κΈ°λŠ₯을 μˆ˜ν–‰ν•œλ‹€. scanf ν•¨μˆ˜λŠ” ν˜•μ‹ μ§€μ •μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 μž…λ ₯받을 λ³€μˆ˜μ˜ νƒ€μž…μ„ μ§€μ •ν•œλ‹€. 일반적으둜 %dλŠ” μ •μˆ˜, %fλŠ” μ‹€μˆ˜, %cλŠ” 문자λ₯Ό μž…λ ₯λ°›λŠ” 데 μ‚¬μš©λœλ‹€. %d, %f, %c λ“± ν˜•μ‹ μ§€μ •μžλ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” ν•΄λ‹Ή λ³€μˆ˜μ˜ μ£Όμ†Œ(&)λ₯Ό ν•¨κ»˜ 전달해야 ν•œλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ scanf ν•¨μˆ˜κ°€ μž…λ ₯받은 값을 ν•΄λ‹Ή λ³€μˆ˜μ˜ λ©”λͺ¨λ¦¬ μœ„μΉ˜μ— μ €μž₯ν•  수 μžˆλ‹€. μ£Όμ˜ν•  점: scanf ν•¨μˆ˜λŠ” μ‚¬μš©μžμ˜ μž…λ ₯을 기닀리닀가 μž…λ ₯을 받을 λ•ŒκΉŒμ§€ μ‹€..

[C] <stdlib.h> λž€?

λŠ” C ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ‚¬μš©λ˜λŠ” ν‘œμ€€ 라이브러리 헀더 νŒŒμΌμ΄λ‹€. 이 헀더 νŒŒμΌμ—λŠ” λ©”λͺ¨λ¦¬ 관리, λ‚œμˆ˜ 생성, λ¬Έμžμ—΄ λ³€ν™˜, ν”„λ‘œμ„ΈμŠ€ μ œμ–΄ λ“±κ³Ό κ΄€λ ¨λœ ν•¨μˆ˜λ“€μ΄ μ •μ˜λ˜μ–΄ μžˆλ‹€. 헀더 νŒŒμΌμ— μ •μ˜λœ λͺ‡ 가지 μ€‘μš”ν•œ ν•¨μˆ˜λ“€μ€ λ‹€μŒκ³Ό κ°™λ‹€: malloc(), calloc(), realloc(), free(): 동적 λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό κ΄€λ ¨λœ ν•¨μˆ˜λ“€μ΄λ‹€. malloc()은 주어진 크기의 λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³ , calloc()은 크기가 0으둜 μ΄ˆκΈ°ν™”λœ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•œλ‹€. realloc()은 이미 ν• λ‹Ήλœ λ©”λͺ¨λ¦¬μ˜ 크기λ₯Ό μ‘°μ •ν•œλ‹€. free()λŠ” λ™μ μœΌλ‘œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•œλ‹€. rand(), srand(): λ‚œμˆ˜ 생성과 κ΄€λ ¨λœ ν•¨μˆ˜λ“€μ΄λ‹€. rand()λŠ” 0λΆ€ν„° RAND_MAX μ‚¬μ΄μ˜ λ‚œμˆ˜λ₯Ό μƒμ„±ν•˜κ³ , srand()λŠ” λ‚œ..

[C] <stdbool.h> λž€?

은 C ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ‚¬μš©λ˜λŠ” 헀더 νŒŒμΌμ΄λ‹€. 이 헀더 νŒŒμΌμ—λŠ” C μ–Έμ–΄μ—μ„œ λΆˆλ¦¬μ–Έ(bool) νƒ€μž…κ³Ό κ΄€λ ¨λœ κΈ°λŠ₯이 μ •μ˜λ˜μ–΄ μžˆλ‹€. C μ–Έμ–΄λŠ” 기본적으둜 λΆˆλ¦¬μ–Έ νƒ€μž…μ„ μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 헀더 νŒŒμΌμ„ ν¬ν•¨ν•˜λ©΄, bool νƒ€μž…κ³Ό κ΄€λ ¨λœ λ§€ν¬λ‘œλ“€μ„ μ‚¬μš©ν•  수 있게 λœλ‹€. 이 헀더 νŒŒμΌμ—λŠ” λ‹€μŒκ³Ό 같은 λ§€ν¬λ‘œλ“€μ΄ μ •μ˜λ˜μ–΄ μžˆλ‹€: bool: true와 false 값을 λ‚˜νƒ€λ‚΄λŠ” λΆˆλ¦¬μ–Έ νƒ€μž…μž…λ‹ˆλ‹€. true: μ°Έ(진싀)을 λ‚˜νƒ€λ‚΄λŠ” λ§€ν¬λ‘œμž…λ‹ˆλ‹€. false: 거짓을 λ‚˜νƒ€λ‚΄λŠ” λ§€ν¬λ‘œμž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ§€ν¬λ‘œλ“€μ€ 쑰건문, 논리 μ—°μ‚° λ“±μ—μ„œ μ‚¬μš©λ  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, λ‹€μŒκ³Ό 같이 bool νƒ€μž…μ„ μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  μ΄ˆκΈ°ν™”ν•  수 μžˆλ‹€: HTML μ‚½μž… 미리보기할 수 μ—†λŠ” μ†ŒμŠ€ 헀더 νŒŒμΌμ€ C99 ν‘œμ€€μ—μ„œ λ„μž…λ˜μ—ˆμœΌ..

[C] <stdio.h>λž€?

λŠ” C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν‘œμ€€ μž…λ ₯κ³Ό 좜λ ₯을 닀루기 μœ„ν•œ 헀더 νŒŒμΌμ΄λ‹€. "stdio"λŠ” "Standard Input/Output"의 μ•½μžλ‘œ, ν‘œμ€€ μž…μΆœλ ₯을 κ΄€λ¦¬ν•˜λŠ” ν•¨μˆ˜λ“€μ„ ν¬ν•¨ν•˜κ³  μžˆλ‹€. 헀더 νŒŒμΌμ€ λ‹€μ–‘ν•œ μž…μΆœλ ₯ κ΄€λ ¨ ν•¨μˆ˜λ“€κ³Ό 맀크둜 μƒμˆ˜λ“€μ„ μ œκ³΅ν•œλ‹€. λͺ‡ 가지 ν”νžˆ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μ™€ μƒμˆ˜λ₯Ό μ‚΄νŽ΄λ³΄κ² λ‹€: printf: 화면에 좜λ ₯을 μœ„ν•œ ν•¨μˆ˜λ‘œ, μ„œμ‹ μ§€μ •μžλ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜μ˜ 값을 ν¬λ§·νŒ…ν•˜μ—¬ 좜λ ₯ν•  수 μžˆλ‹€. scanf: μ‚¬μš©μžμ˜ μž…λ ₯을 λ°›κΈ° μœ„ν•œ ν•¨μˆ˜λ‘œ, μ„œμ‹ μ§€μ •μžλ₯Ό μ‚¬μš©ν•˜μ—¬ μž…λ ₯ 값을 λ³€μˆ˜μ— μ €μž₯ν•  수 μžˆλ‹€. getchar: ν•œ 문자λ₯Ό μž…λ ₯ λ°›κΈ° μœ„ν•œ ν•¨μˆ˜λ‘œ, ν‚€λ³΄λ“œλ‘œλΆ€ν„° ν•œ κΈ€μžλ₯Ό μ½μ–΄μ˜¨λ‹€. putchar: ν•œ 문자λ₯Ό 좜λ ₯ν•˜κΈ° μœ„ν•œ ν•¨μˆ˜λ‘œ, 화면에 ν•œ κΈ€μžλ₯Ό 좜λ ₯ν•œλ‹€. fgets: λ¬Έμžμ—΄μ„ μž…λ ₯ ..