λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

λ¬Έμžμ—΄ μž…μΆœλ ₯ gets, putsν•¨μˆ˜ μ‚¬μš©λ²• & 예제

by 5566 2023. 11. 24.

λͺ©μ°¨:

  1. gets와 puts ν•¨μˆ˜λž€?
  2. gets ν•¨μˆ˜μ˜ μ‚¬μš©λ²•
  3. gets ν•¨μˆ˜ 예제
  4. puts ν•¨μˆ˜μ˜ μ‚¬μš©λ²•
  5. puts ν•¨μˆ˜ 예제

1. gets와 puts ν•¨μˆ˜λž€?

gets와 puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄ μž…μΆœλ ₯을 μœ„ν•΄ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. gets ν•¨μˆ˜λŠ” μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›μ•„ λ³€μˆ˜μ— μ €μž₯ν•˜κ³ , puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•©λ‹ˆλ‹€.

2. gets ν•¨μˆ˜μ˜ μ‚¬μš©λ²•

gets ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€:

gets(λ³€μˆ˜);

μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯ 받은 λ¬Έμžμ—΄μ„ λ³€μˆ˜μ— μ €μž₯ν•˜κΈ° μœ„ν•΄ gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

3. gets ν•¨μˆ˜ 예제

λ‹€μŒμ€ gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯받은 이름을 좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€:

char name[100]; // μž…λ ₯을 μ €μž₯ν•  λ³€μˆ˜ μ„ μ–Έ
gets(name); // μ‚¬μš©μžλ‘œλΆ€ν„° 이름 μž…λ ₯ λ°›μŒ
puts(name); // μž…λ ₯받은 이름 좜λ ₯

4. puts ν•¨μˆ˜μ˜ μ‚¬μš©λ²•

puts ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€:

puts("λ¬Έμžμ—΄");

인자둜 μ „λ‹¬λœ λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•©λ‹ˆλ‹€. 좜λ ₯ν•  λ¬Έμžμ—΄μ€ ν°λ”°μ˜΄ν‘œλ‘œ 감싸야 ν•©λ‹ˆλ‹€.

5. puts ν•¨μˆ˜ 예제

λ‹€μŒμ€ puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ "Hello, World!"λ₯Ό 좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€:

puts("Hello, World!");

gets와 puts ν•¨μˆ˜λŠ” 효율적이고 νŽΈλ¦¬ν•œ λ¬Έμžμ—΄ μž…μΆœλ ₯을 μœ„ν•΄ μ‚¬μš©λ˜λŠ” μ€‘μš”ν•œ ν•¨μˆ˜μž…λ‹ˆλ‹€. 예제λ₯Ό 톡해 각 ν•¨μˆ˜μ˜ μ‚¬μš©λ²•μ„ ν™•μΈν•˜μ˜€μŠ΅λ‹ˆλ‹€. 이λ₯Ό ν™œμš©ν•˜μ—¬ λ‹€μ–‘ν•œ ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•  수 있으며, λ¬Έμžμ—΄ μž…μΆœλ ₯에 λŒ€ν•œ 이해λ₯Ό 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

1. gets와 puts ν•¨μˆ˜λž€?

gets와 puts ν•¨μˆ˜λŠ” Cμ–Έμ–΄μ—μ„œ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κ³  좜λ ₯ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

gets ν•¨μˆ˜

gets ν•¨μˆ˜λŠ” μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›μ•„λ“€μ—¬ λ¬Έμžμ—΄μ„ λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€. μž…λ ₯된 λ¬Έμžμ—΄μ„ μ €μž₯ν•  λ³€μˆ˜λ₯Ό 인자둜 λ°›κ³ , ν‘œμ€€μž…λ ₯(stdin)μœΌλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›μ•„ λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” ν•¨μˆ˜λ‘œ, 인자둜 μ „λ‹¬λœ λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•©λ‹ˆλ‹€. 좜λ ₯ν•  λ¬Έμžμ—΄κ³Ό κ°œν–‰ 문자(\n)λ₯Ό ν•¨κ»˜ 좜λ ₯ν•˜λ©°, μ€„λ°”κΏˆ κΈ°λŠ₯을 κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€.

gets와 puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κ³  좜λ ₯ν•˜λŠ” κΈ°λŠ₯을 κ°–μΆ˜ ν•¨μˆ˜λ‘œ, 효율적인 λ¬Έμžμ—΄ μž…μΆœλ ₯을 μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€. 이 ν•¨μˆ˜λ“€μ„ μ‚¬μš©ν•˜λ©΄ μ‚¬μš©μžμ™€μ˜ μƒν˜Έμž‘μš©μ΄ κ°€λŠ₯ν•˜κ³ , ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ κ²°κ³Όλ₯Ό μ‰½κ²Œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

2. gets ν•¨μˆ˜μ˜ μ‚¬μš©λ²•

gets ν•¨μˆ˜λŠ” μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›μ•„λ“€μ—¬ λ¬Έμžμ—΄μ„ λ³€μˆ˜μ— μ €μž₯ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. μ•„λž˜λŠ” gets ν•¨μˆ˜μ˜ μ‚¬μš©λ²•μ„ μƒμ„Ένžˆ μ„€λͺ…ν•œ κ²ƒμž…λ‹ˆλ‹€:

```c
gets(λ³€μˆ˜);
  • λ³€μˆ˜: μž…λ ₯받은 λ¬Έμžμ—΄μ„ μ €μž₯ν•  λ³€μˆ˜μž…λ‹ˆλ‹€. λ³€μˆ˜λŠ” λ¬Έμžμ—΄μ„ μ €μž₯ν•  μΆ©λΆ„ν•œ 곡간을 ν• λ‹Ήλ°›μ•„μ•Ό ν•©λ‹ˆλ‹€.

gets ν•¨μˆ˜λŠ” μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›μ•„ λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€. gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ€ μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 받을 수 μžˆλŠ” μƒνƒœκ°€ λ©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μ—”ν„° ν‚€λ₯Ό λˆ„λ₯΄κΈ° μ „κΉŒμ§€μ˜ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›μ•„ λ³€μˆ˜μ— μ €μž₯ν•˜λ©°, μž…λ ₯이 μ™„λ£Œλ˜λ©΄ μžλ™μœΌλ‘œ λ¬Έμžμ—΄μ˜ 끝에 널 문자('\0')λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

μ£Όμ˜ν•΄μ•Ό ν•  점은, gets ν•¨μˆ˜λŠ” 버퍼 μ˜€λ²„ν”Œλ‘œμš°(buffer overflow)와 κ΄€λ ¨λœ λ³΄μ•ˆ 취약점을 가지고 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ gets ν•¨μˆ˜ λŒ€μ‹  fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€. fgets ν•¨μˆ˜λŠ” λ¬Έμžμ—΄ 크기에 λŒ€ν•œ μ œν•œμ„ μ„€μ •ν•  수 μžˆμ–΄, μž…λ ₯ν•˜λŠ” λ¬Έμžμ—΄μ΄ μ €μž₯될 λ²„νΌμ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜μ§€ μ•Šλ„λ‘ μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. gets ν•¨μˆ˜ 예제

μ•„λž˜λŠ” gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œ 예제 μ½”λ“œμž…λ‹ˆλ‹€:

#include <stdio.h>

int main(void) {
    char name[20];

    printf("이름을 μž…λ ₯ν•˜μ„Έμš”: ");
    gets(name);

    printf("μž…λ ₯ν•œ 이름은 %sμž…λ‹ˆλ‹€.\n", name);

    return 0;
}

이 μ˜ˆμ œλŠ” μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›μ•„μ„œ 좜λ ₯ν•˜λŠ” κΈ°λŠ₯을 가진 κ°„λ‹¨ν•œ ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.

  1. λ³€μˆ˜ name을 μ„ μ–Έν•©λ‹ˆλ‹€. λ¬Έμžμ—΄μ„ μ €μž₯ν•˜κΈ° μœ„ν•΄ μΆ©λΆ„ν•œ 크기(20)둜 배열을 ν• λ‹Ήν•©λ‹ˆλ‹€.
  2. printf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ "이름을 μž…λ ₯ν•˜μ„Έμš”: "λΌλŠ” λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
  3. gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›μ•„ name λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€.
  4. printf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ "μž…λ ₯ν•œ 이름은 [μž…λ ₯ν•œ κ°’]μž…λ‹ˆλ‹€."λΌλŠ” λ©”μ‹œμ§€μ™€ μž…λ ₯ν•œ 이름을 좜λ ₯ν•©λ‹ˆλ‹€.
  5. ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•©λ‹ˆλ‹€.

μœ„ μ˜ˆμ œμ—μ„œ gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯받은 λ¬Έμžμ—΄μ„ name λ³€μˆ˜μ— μ €μž₯ν•˜κ³ , 이λ₯Ό 좜λ ₯ν•˜λŠ” 과정을 κ±°μΉ©λ‹ˆλ‹€. μ‚¬μš©μžλŠ” 이름을 μž…λ ₯ν•œ ν›„ μ—”ν„° ν‚€λ₯Ό λˆ„λ₯΄λ©΄ μž…λ ₯ν•œ 값이 좜λ ₯λ©λ‹ˆλ‹€.

μœ„ μ˜ˆμ œμ—μ„œλŠ” λ¬Έμžμ—΄μ˜ 크기에 λŒ€ν•œ μ œν•œμ΄ μ—†μœΌλ©°, 잠재적인 버퍼 μ˜€λ²„ν”Œλ‘œμš° 취약점을 가지고 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ‹€μ œ μ‚¬μš©ν•  λ•Œμ—λŠ” fgets ν•¨μˆ˜μ™€ 같이 λ¬Έμžμ—΄μ˜ 크기λ₯Ό μ œν•œν•˜λŠ” ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

4. puts ν•¨μˆ˜μ˜ μ‚¬μš©λ²•

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. μ•„λž˜λŠ” puts ν•¨μˆ˜μ˜ μ‚¬μš©λ²•μ„ μƒμ„Ένžˆ μ„€λͺ…ν•œ κ²ƒμž…λ‹ˆλ‹€:

```c
puts(λ¬Έμžμ—΄);
  • λ¬Έμžμ—΄: 좜λ ₯ν•  λ¬Έμžμ—΄μž…λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” 인자둜 μ „λ‹¬λœ λ¬Έμžμ—΄μ„ ν‘œμ€€ 좜λ ₯ μž₯μΉ˜μ— 좜λ ₯ν•©λ‹ˆλ‹€. λ¬Έμžμ—΄μ˜ λμ—λŠ” μžλ™μœΌλ‘œ κ°œν–‰ 문자('\n')κ°€ μΆ”κ°€λ©λ‹ˆλ‹€.

puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 단계λ₯Ό λ”°λ¦…λ‹ˆλ‹€:

  1. 좜λ ₯ν•  λ¬Έμžμ—΄μ„ μ€€λΉ„ν•©λ‹ˆλ‹€. C μ–Έμ–΄μ—μ„œ λ¬Έμžμ—΄μ€ ν°λ”°μ˜΄ν‘œ("")둜 묢여진 λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄λ‘œ ν‘œν˜„λ©λ‹ˆλ‹€.
  2. puts ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ€€λΉ„ν•œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•©λ‹ˆλ‹€.
  3. ν”„λ‘œκ·Έλž¨μ˜ λ‚˜λ¨Έμ§€ 뢀뢄을 μ‹€ν–‰ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ•„λž˜μ˜ 예제 μ½”λ“œλŠ” "Hello, World!" λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” κ°„λ‹¨ν•œ ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€:

#include <stdio.h>

int main(void) {
    puts("Hello, World!");

    return 0;
}

μœ„ μ˜ˆμ œμ—μ„œλŠ” puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄ "Hello, World!"λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. 좜λ ₯ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

Hello, World!

λ¬Έμžμ—΄μ„ 좜λ ₯ν•  λ•Œμ—λŠ” ν°λ”°μ˜΄ν‘œ("")둜 λ¬Άμ—¬μ•Ό ν•˜λ©°, printf ν•¨μˆ˜μ™€λŠ” 달리 ν˜•μ‹ μ§€μ •μžλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ μžλ™μœΌλ‘œ κ°œν–‰ν•˜μ—¬ 좜λ ₯ν•˜κΈ° λ•Œλ¬Έμ—, κ°œν–‰ 문자('\n')을 μΆ”κ°€ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€.

5. puts ν•¨μˆ˜ 예제

μ•„λž˜λŠ” puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œ 예제 μ½”λ“œμž…λ‹ˆλ‹€:

#include <stdio.h>

int main(void) {
    char name[] = "John";

    puts("Welcome!");
    puts("Please enter your name:");

    // μ‚¬μš©μžλ‘œλΆ€ν„° 이름 μž…λ ₯ λ°›κΈ°
    scanf("%s", name);

    puts("Nice to meet you, ");
    puts(name);

    return 0;
}

이 μ˜ˆμ œλŠ” μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›μ•„ "Nice to meet you, [μž…λ ₯ν•œ 이름]"κ³Ό 같은 λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.

  1. λ¬Έμžμ—΄μ„ μ €μž₯ν•  name 배열을 μ„ μ–Έν•˜κ³  μ΄ˆκΈ°κ°’μœΌλ‘œ "John"을 ν• λ‹Ήν•©λ‹ˆλ‹€.
  2. puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ "Welcome!" λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
  3. puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ "Please enter your name:" λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
  4. scanf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›μ•„ name 배열에 μ €μž₯ν•©λ‹ˆλ‹€.
  5. puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ "Nice to meet you, " λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
  6. puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ name λ°°μ—΄μ˜ 값을 좜λ ₯ν•©λ‹ˆλ‹€.
  7. ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•©λ‹ˆλ‹€.

μœ„ μ˜ˆμ œμ—μ„œ puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 각 puts ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ ν•΄λ‹Ή λ¬Έμžμ—΄μ΄ ν‘œμ€€ 좜λ ₯ μž₯μΉ˜μ— 좜λ ₯λ©λ‹ˆλ‹€. μ˜ˆμ œμ—μ„œλŠ” puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•˜κ³ , μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›μ•„μ„œ 좜λ ₯ν•˜λŠ” 과정을 κ±°μΉ©λ‹ˆλ‹€.

μ‹€ν–‰ κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€:

Welcome!
Please enter your name:
John
Nice to meet you, 
John

name 배열에 μ €μž₯된 값이 좜λ ₯λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ κ°„λ‹¨ν•˜κ³  νŽΈλ¦¬ν•˜κ²Œ λ¬Έμžμ—΄μ„ ν‘œμ€€ 좜λ ₯에 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜ 예제

μ•„λž˜ 예제 μ½”λ“œλŠ” μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›μ•„ ν™˜μ˜ λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.

#include <stdio.h>

int main(void) {
    char name[20];

    printf("Welcome!\n");
    printf("Please enter your name: ");

    // μ‚¬μš©μžλ‘œλΆ€ν„° 이름 μž…λ ₯ λ°›κΈ°
    fgets(name, sizeof(name), stdin);

    printf("Nice to meet you, %s\n", name);

    return 0;
}

이 μ˜ˆμ œμ—μ„œλŠ” puts ν•¨μˆ˜ λŒ€μ‹  printf ν•¨μˆ˜μ™€ fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

  1. nameμ΄λΌλŠ” λ¬Έμžμ—΄μ„ μ €μž₯ν•  배열을 μ„ μ–Έν•˜κ³  크기λ₯Ό 20으둜 μ„€μ •ν•©λ‹ˆλ‹€.
  2. "Welcome!" λ©”μ‹œμ§€λ₯Ό printf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.
  3. "Please enter your name: " λ©”μ‹œμ§€λ₯Ό printf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.
  4. fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›κ³ , name 배열에 μ €μž₯ν•©λ‹ˆλ‹€. μ΄λ•Œ, sizeof(name)을 μ‚¬μš©ν•˜μ—¬ name λ°°μ—΄μ˜ 크기λ₯Ό μ§€μ •ν•˜κ³ , stdin을 μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›μŠ΅λ‹ˆλ‹€.
  5. "Nice to meet you, "와 name λ°°μ—΄μ˜ 값을 printf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.
  6. ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜ λŒ€μ‹  printf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž μž…λ ₯을 λ°›κΈ° μœ„ν•΄μ„œμž…λ‹ˆλ‹€. fgets ν•¨μˆ˜λŠ” 버퍼 μ˜€λ²„ν”Œλ‘œμš°λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œ μž…λ ₯ λ²„νΌμ˜ 크기λ₯Ό μ§€μ •ν•΄μ•Όν•˜λŠ”λ°, 이λ₯Ό μœ„ν•΄μ„œ sizeof(name)을 μ‚¬μš©ν•©λ‹ˆλ‹€.

μ‹€ν–‰ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

Welcome!
Please enter your name: John
Nice to meet you, John

name 배열에 μ €μž₯된 이름이 좜λ ₯λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. puts ν•¨μˆ˜μ™€ printf ν•¨μˆ˜λŠ” λͺ¨λ‘ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. 각각의 ν•¨μˆ˜λŠ” 좜λ ₯ 방식이 μ‘°κΈˆμ”© λ‹€λ₯΄μ§€λ§Œ, μ‚¬μš©μžμ˜ μš”κ΅¬μ— 맞게 μ„ νƒν•˜μ—¬ μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.

주제: gets와 puts ν•¨μˆ˜ μ‚¬μš©λ²• 및 예제

gets ν•¨μˆ˜

gets ν•¨μˆ˜λŠ” μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ„ 문자 배열에 μ €μž₯ν•˜κ³ , NULL 문자(\0)둜 λ§ˆλ¬΄λ¦¬ν•©λ‹ˆλ‹€.

char *gets(char *str);
  • str: λ¬Έμžμ—΄μ„ μ €μž₯ν•  문자 λ°°μ—΄μ˜ 포인터

μ‚¬μš©λ²•:

  1. μž…λ ₯받을 λ¬Έμžμ—΄μ„ μ €μž₯ν•  문자 배열을 μ„ μ–Έν•©λ‹ˆλ‹€.
  2. gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κ³ , μž…λ ₯받은 λ¬Έμžμ—΄μ΄ 문자 배열에 μ €μž₯λ©λ‹ˆλ‹€.

주의 사항:

gets ν•¨μˆ˜λŠ” λ³΄μ•ˆμƒμ˜ 이유둜 μ‚¬μš©μ΄ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μž…λ ₯ λ¬Έμžμ—΄μ˜ 길이 μ œν•œμ΄ μ—†κΈ° λ•Œλ¬Έμ— 버퍼 μ˜€λ²„ν”Œλ‘œμš°λ₯Ό μΌμœΌν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€μ‹  fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ•ˆμ „ν•˜κ²Œ λ¬Έμžμ—΄μ„ μž…λ ₯받을 수 μžˆμŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” \n 문자λ₯Ό λ§ˆμ§€λ§‰μœΌλ‘œ μžλ™μœΌλ‘œ 좜λ ₯ν•˜μ—¬ μ€„λ°”κΏˆμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

int puts(const char *str);
  • str: 좜λ ₯ν•  λ¬Έμžμ—΄μ˜ 포인터

μ‚¬μš©λ²•:

  1. 좜λ ₯ν•  λ¬Έμžμ—΄μ„ ν¬μΈν„°λ‘œ μ „λ‹¬ν•©λ‹ˆλ‹€.
  2. puts ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ „λ‹¬ν•œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•©λ‹ˆλ‹€.

주의 사항:

puts ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ„ λκΉŒμ§€ 좜λ ₯ν•˜κ³ , μžλ™μœΌλ‘œ μ€„λ°”κΏˆμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ λ¬Έμžμ—΄ 내에 μ€„λ°”κΏˆμ΄ ν•„μš”ν•œ 경우 λ³„λ„λ‘œ μ œμ–΄ν•΄μ•Όν•©λ‹ˆλ‹€.

예제: gets와 puts ν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°

λ‹€μŒμ€ gets ν•¨μˆ˜μ™€ puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›κ³ , μž…λ ₯받은 이름을 ν™˜μ˜ν•˜λŠ” 예제 μ½”λ“œμž…λ‹ˆλ‹€.

#include <stdio.h>

int main(void) {
    char name[20];

    printf("Welcome!\n");
    printf("Please enter your name: ");

    // μ‚¬μš©μžλ‘œλΆ€ν„° 이름 μž…λ ₯ λ°›κΈ°
    gets(name);

    printf("Nice to meet you, ");
    puts(name);

    return 0;
}
  1. nameμ΄λΌλŠ” λ¬Έμžμ—΄μ„ μ €μž₯ν•  배열을 μ„ μ–Έν•˜κ³  크기λ₯Ό 20으둜 μ„€μ •ν•©λ‹ˆλ‹€.
  2. "Welcome!" λ©”μ‹œμ§€λ₯Ό printf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.
  3. "Please enter your name: " λ©”μ‹œμ§€λ₯Ό printf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.
  4. gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›κ³ , name 배열에 μ €μž₯ν•©λ‹ˆλ‹€.
  5. "Nice to meet you, " λ©”μ‹œμ§€λ₯Ό printf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.
  6. name λ°°μ—΄μ˜ 값을 puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 좜λ ₯ν•˜κ³ , μžλ™μœΌλ‘œ μ€„λ°”κΏˆμ΄ μˆ˜ν–‰λ©λ‹ˆλ‹€.
  7. ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•©λ‹ˆλ‹€.

이 μ˜ˆμ œμ—μ„œλŠ” gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ gets ν•¨μˆ˜λŠ” 버퍼 μ˜€λ²„ν”Œλ‘œμš°λ₯Ό μΌμœΌν‚¬ 수 μžˆμœΌλ―€λ‘œ, μ•ˆμ „ν•œ ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•΄μ„œ fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€.

μ‹€ν–‰ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

Welcome!
Please enter your name: John
Nice to meet you, John

μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 이름이 좜λ ₯λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ 좜λ ₯ν•  수 있으며, μœ μš©ν•œ μ€„λ°”κΏˆ κΈ°λŠ₯을 μžλ™μœΌλ‘œ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

gets와 puts ν•¨μˆ˜ μ‚¬μš©λ²• 및 예제

gets ν•¨μˆ˜

gets ν•¨μˆ˜λŠ” μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ„ 문자 배열에 μ €μž₯ν•˜κ³ , NULL 문자(\0)둜 λ§ˆλ¬΄λ¦¬ν•©λ‹ˆλ‹€.

char *gets(char *str);
  • str: λ¬Έμžμ—΄μ„ μ €μž₯ν•  문자 λ°°μ—΄μ˜ 포인터

gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 단계λ₯Ό λ”°λ₯΄λ©΄ λ©λ‹ˆλ‹€:

  1. μž…λ ₯받을 λ¬Έμžμ—΄μ„ μ €μž₯ν•  문자 배열을 μ„ μ–Έν•©λ‹ˆλ‹€.
  2. gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κ³ , μž…λ ₯받은 λ¬Έμžμ—΄μ΄ 문자 배열에 μ €μž₯λ©λ‹ˆλ‹€.

λ‹€λ§Œ, gets ν•¨μˆ˜λŠ” λ³΄μ•ˆμƒμ˜ 이유둜 μ‚¬μš©μ΄ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μž…λ ₯ λ¬Έμžμ—΄μ˜ 길이 μ œν•œμ΄ μ—†κΈ° λ•Œλ¬Έμ— 버퍼 μ˜€λ²„ν”Œλ‘œμš°λ₯Ό μΌμœΌν‚¬ 수 있으며, μ΄λŠ” λ³΄μ•ˆ μ·¨μ•½μ μœΌλ‘œ μ΄μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€μ‹ μ— fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ•ˆμ „ν•˜κ²Œ λ¬Έμžμ—΄μ„ μž…λ ₯받을 수 μžˆμŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” \n 문자λ₯Ό λ§ˆμ§€λ§‰μœΌλ‘œ μžλ™μœΌλ‘œ 좜λ ₯ν•˜μ—¬ μ€„λ°”κΏˆμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

int puts(const char *str);
  • str: 좜λ ₯ν•  λ¬Έμžμ—΄μ˜ 포인터

puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 단계λ₯Ό λ”°λ₯΄λ©΄ λ©λ‹ˆλ‹€:

  1. 좜λ ₯ν•  λ¬Έμžμ—΄μ„ ν¬μΈν„°λ‘œ μ „λ‹¬ν•©λ‹ˆλ‹€.
  2. puts ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ „λ‹¬ν•œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ„ λκΉŒμ§€ 좜λ ₯ν•˜κ³ , μžλ™μœΌλ‘œ μ€„λ°”κΏˆμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. λ”°λΌμ„œ λ¬Έμžμ—΄ 내에 μ€„λ°”κΏˆμ΄ ν•„μš”ν•œ 경우 λ³„λ„λ‘œ μ œμ–΄ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

예제: gets와 puts ν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°

λ‹€μŒμ€ gets ν•¨μˆ˜μ™€ puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›κ³ , μž…λ ₯받은 이름을 ν™˜μ˜ν•˜λŠ” 예제 μ½”λ“œμž…λ‹ˆλ‹€.

#include <stdio.h>

int main(void) {
    char name[20];

    printf("Welcome!\n");
    printf("Please enter your name: ");

    // μ‚¬μš©μžλ‘œλΆ€ν„° 이름 μž…λ ₯ λ°›κΈ°
    gets(name);

    printf("Nice to meet you, ");
    puts(name);

    return 0;
}

μœ„ 예제 μ½”λ“œμ—μ„œλŠ” nameμ΄λΌλŠ” λ¬Έμžμ—΄μ„ μ €μž₯ν•  배열을 μ„ μ–Έν•˜κ³  크기λ₯Ό 20으둜 μ„€μ •ν•©λ‹ˆλ‹€. μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›κΈ° μœ„ν•΄ gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ³ , μž…λ ₯받은 이름을 name 배열에 μ €μž₯ν•©λ‹ˆλ‹€. κ·Έ 후에 puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ name λ°°μ—΄μ˜ 값을 좜λ ₯ν•˜κ³ , μžλ™μœΌλ‘œ μ€„λ°”κΏˆμ΄ μˆ˜ν–‰λ©λ‹ˆλ‹€.

μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 이름은 좜λ ₯ λ©”μ‹œμ§€μ— ν¬ν•¨λ˜μ–΄ 화면에 좜λ ₯λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ°Έκ³ : gets ν•¨μˆ˜λŠ” 버퍼 μ˜€λ²„ν”Œλ‘œμš°μ— μ·¨μ•½ν•˜μ—¬ λ³΄μ•ˆμƒμ˜ 이유둜 μ‚¬μš©μ΄ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹  fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ•ˆμ „ν•˜κ²Œ λ¬Έμžμ—΄μ„ μž…λ ₯받을 수 μžˆμŠ΅λ‹ˆλ‹€.

1. gets와 puts ν•¨μˆ˜λž€?

gets ν•¨μˆ˜

gets ν•¨μˆ˜λŠ” C μ–Έμ–΄μ—μ„œ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ„ 문자 배열에 μ €μž₯ν•˜κ³ , NULL 문자(\0)둜 λ§ˆλ¬΄λ¦¬ν•©λ‹ˆλ‹€. gets ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•μ‹μ„ κ°–μŠ΅λ‹ˆλ‹€:

char *gets(char *str);
  • str: λ¬Έμžμ—΄μ„ μ €μž₯ν•  문자 λ°°μ—΄μ˜ 포인터

gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 단계λ₯Ό λ”°λ₯΄λ©΄ λ©λ‹ˆλ‹€:

  1. μž…λ ₯받을 λ¬Έμžμ—΄μ„ μ €μž₯ν•  문자 배열을 μ„ μ–Έν•©λ‹ˆλ‹€. μ΄λ•Œ, λ°°μ—΄μ˜ ν¬κΈ°λŠ” μž…λ ₯받을 λ¬Έμžμ—΄μ˜ μ΅œλŒ€ 길이보닀 크게 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  2. gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κ³ , μž…λ ₯받은 λ¬Έμžμ—΄μ΄ 문자 배열에 μ €μž₯λ©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ gets ν•¨μˆ˜λŠ” λ³΄μ•ˆμƒμ˜ 이유둜 μ‚¬μš©μ΄ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μž…λ ₯ λ¬Έμžμ—΄μ˜ 길이 μ œν•œμ΄ μ—†κΈ° λ•Œλ¬Έμ— 버퍼 μ˜€λ²„ν”Œλ‘œμš°(buffer overflow)λ₯Ό μΌμœΌν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ, λŒ€μ‹ μ— fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ•ˆμ „ν•˜κ²Œ λ¬Έμžμ—΄μ„ μž…λ ₯받을 수 μžˆμŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜

puts ν•¨μˆ˜λŠ” C μ–Έμ–΄μ—μ„œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•œ ν›„ μžλ™μœΌλ‘œ μ€„λ°”κΏˆμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•μ‹μ„ κ°–μŠ΅λ‹ˆλ‹€:

int puts(const char *str);
  • str: 좜λ ₯ν•  λ¬Έμžμ—΄μ˜ 포인터

puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 단계λ₯Ό λ”°λ₯΄λ©΄ λ©λ‹ˆλ‹€:

  1. 좜λ ₯ν•  λ¬Έμžμ—΄μ„ ν¬μΈν„°λ‘œ μ „λ‹¬ν•©λ‹ˆλ‹€.
  2. puts ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ „λ‹¬ν•œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ„ λκΉŒμ§€ 좜λ ₯ν•œ λ’€, μžλ™μœΌλ‘œ μ€„λ°”κΏˆμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. λ”°λΌμ„œ, λ¬Έμžμ—΄ 내에 μ€„λ°”κΏˆμ΄ ν•„μš”ν•œ κ²½μš°μ—λ„ λ³„λ„λ‘œ μ œμ–΄ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

μžμ„Έν•œ μ‚¬μš©λ²•κ³Ό μ˜ˆμ œλŠ” μ΄μ–΄μ§€λŠ” λ‹¨λ½μ—μ„œ λ‹€λ£¨κ² μŠ΅λ‹ˆλ‹€.

- gets ν•¨μˆ˜: μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” ν•¨μˆ˜

gets ν•¨μˆ˜λŠ” C μ–Έμ–΄μ—μ„œ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ„ 문자 배열에 μ €μž₯ν•˜κ³ , NULL 문자(\0)둜 λ§ˆλ¬΄λ¦¬ν•©λ‹ˆλ‹€. gets ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•μ‹μ„ κ°–μŠ΅λ‹ˆλ‹€:

char *gets(char *str);
  • str: λ¬Έμžμ—΄μ„ μ €μž₯ν•  문자 λ°°μ—΄μ˜ 포인터

gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 단계λ₯Ό λ”°λ₯΄λ©΄ λ©λ‹ˆλ‹€:

  1. μž…λ ₯받을 λ¬Έμžμ—΄μ„ μ €μž₯ν•  문자 배열을 μ„ μ–Έν•©λ‹ˆλ‹€. μ΄λ•Œ, λ°°μ—΄μ˜ ν¬κΈ°λŠ” μž…λ ₯받을 λ¬Έμžμ—΄μ˜ μ΅œλŒ€ 길이보닀 크게 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  2. gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κ³ , μž…λ ₯받은 λ¬Έμžμ—΄μ΄ 문자 배열에 μ €μž₯λ©λ‹ˆλ‹€.

μž…λ ₯받을 λ¬Έμžμ—΄μ„ μ €μž₯ν•  문자 λ°°μ—΄μ˜ ν¬κΈ°λŠ” μž…λ ₯받을 λ¬Έμžμ—΄μ˜ μ΅œλŒ€ 길이보닀 크게 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 20자 μ΄ν•˜μ˜ λ¬Έμžμ—΄μ„ μž…λ ₯받을 κ²½μš°μ—λŠ” char name[20]κ³Ό 같이 문자 배열을 μ„ μ–Έν•΄μ•Ό ν•©λ‹ˆλ‹€.

gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ μ‚¬μš©μžκ°€ ν‚€λ³΄λ“œλ‘œ μž…λ ₯ν•œ λ¬Έμžμ—΄μ΄ 문자 배열에 μ €μž₯λ©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ Enter ν‚€λ₯Ό λˆ„λ₯Ό λ•ŒκΉŒμ§€ μž…λ ₯된 λ¬Έμžλ“€μ΄ 문자 배열에 μ €μž₯되며, Enter ν‚€λŠ” λ¬Έμžμ—΄μ˜ 끝을 λ‚˜νƒ€λ‚΄λŠ” NULL 문자(\0)둜 λŒ€μ²΄λ©λ‹ˆλ‹€.

μž…λ ₯받은 λ¬Έμžμ—΄μ„ 이후에 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” 문자 배열에 μ €μž₯된 값을 ν™œμš©ν•˜λ©΄ λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ €μž₯된 λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•˜κ±°λ‚˜ λ‹€λ₯Έ λ³€μˆ˜μ— μ €μž₯ν•˜κ±°λ‚˜ ν•„μš”ν•œ 처리λ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€λ§Œ, gets ν•¨μˆ˜λŠ” λ³΄μ•ˆμƒμ˜ 이유둜 μ‚¬μš©μ΄ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μž…λ ₯ λ¬Έμžμ—΄μ˜ 길이 μ œν•œμ΄ μ—†κΈ° λ•Œλ¬Έμ— 버퍼 μ˜€λ²„ν”Œλ‘œμš°(buffer overflow)λ₯Ό μΌμœΌν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ, λŒ€μ‹ μ— fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ•ˆμ „ν•˜κ²Œ λ¬Έμžμ—΄μ„ μž…λ ₯받을 수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„ λ‚΄μš©μ„ μ°Έκ³ ν•˜μ—¬ gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯받을 수 μžˆμŠ΅λ‹ˆλ‹€.

- puts ν•¨μˆ˜: λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” ν•¨μˆ˜

puts ν•¨μˆ˜λŠ” C μ–Έμ–΄μ—μ„œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•œ ν›„ μžλ™μœΌλ‘œ μ€„λ°”κΏˆμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•μ‹μ„ κ°–μŠ΅λ‹ˆλ‹€:

int puts(const char *str);
  • str: 좜λ ₯ν•  λ¬Έμžμ—΄μ˜ 포인터

puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 단계λ₯Ό λ”°λ₯΄λ©΄ λ©λ‹ˆλ‹€:

  1. 좜λ ₯ν•  λ¬Έμžμ—΄μ„ ν¬μΈν„°λ‘œ μ „λ‹¬ν•©λ‹ˆλ‹€. μ΄λŠ” λ¬Έμžμ—΄μ˜ 첫 번째 문자의 μ£Όμ†Œλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
  2. puts ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ „λ‹¬ν•œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ„ λκΉŒμ§€ 좜λ ₯ν•œ λ’€, μžλ™μœΌλ‘œ μ€„λ°”κΏˆμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. λ”°λΌμ„œ, λ¬Έμžμ—΄ 내에 μ€„λ°”κΏˆμ΄ ν•„μš”ν•œ κ²½μš°μ—λ„ λ³„λ„λ‘œ μ œμ–΄ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•ŒλŠ” λ°˜λ“œμ‹œ λ¬Έμžμ—΄μ˜ 포인터λ₯Ό 전달해야 ν•©λ‹ˆλ‹€. 즉, λ¬Έμžμ—΄μ„ ν°λ”°μ˜΄ν‘œ(")둜 κ°μ‹Έμ„œ μ „λ‹¬ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, λ¬Έμžμ—΄μ˜ 이름을 μ „λ‹¬ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, char message[] = "Hello, World!";λΌλŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λ €λ©΄ puts(message);와 같이 μž‘μ„±ν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” 좜λ ₯ μž‘μ—…μ„ μˆ˜ν–‰ν•œ ν›„ μ„±κ³΅μ μœΌλ‘œ 좜λ ₯을 μ™„λ£Œν•œ 경우 0을 λ°˜ν™˜ν•©λ‹ˆλ‹€. 좜λ ₯ 쀑에 였λ₯˜κ°€ λ°œμƒν•œ κ²½μš°μ—λŠ” EOF (-1)λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ°˜ν™˜ 값을 ν™œμš©ν•˜μ—¬ μž…λ ₯된 λ¬Έμžμ—΄μ„ μ •μƒμ μœΌλ‘œ 좜λ ₯λ˜μ—ˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

μžμ„Έν•œ μ‚¬μš©λ²•κ³Ό μ˜ˆμ œλŠ” μ΄μ–΄μ§€λŠ” λ‹¨λ½μ—μ„œ λ‹€λ£¨κ² μŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜: λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” ν•¨μˆ˜

puts ν•¨μˆ˜λŠ” C μ–Έμ–΄μ—μ„œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•œ ν›„ μžλ™μœΌλ‘œ μ€„λ°”κΏˆμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

int puts(const char *str);
  • str: 좜λ ₯ν•  λ¬Έμžμ—΄μ˜ 포인터

puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 단계λ₯Ό λ”°λ₯΄λ©΄ λ©λ‹ˆλ‹€:

  1. 좜λ ₯ν•  λ¬Έμžμ—΄μ„ ν¬μΈν„°λ‘œ μ „λ‹¬ν•©λ‹ˆλ‹€. μ΄λŠ” λ¬Έμžμ—΄μ˜ 첫 번째 문자의 μ£Όμ†Œλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
  2. puts ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ „λ‹¬ν•œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ„ λκΉŒμ§€ 좜λ ₯ν•œ λ’€, μžλ™μœΌλ‘œ μ€„λ°”κΏˆμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. λ”°λΌμ„œ, λ¬Έμžμ—΄ 내에 μ€„λ°”κΏˆμ΄ ν•„μš”ν•œ κ²½μš°μ—λ„ λ³„λ„λ‘œ μ œμ–΄ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•ŒλŠ” λ°˜λ“œμ‹œ λ¬Έμžμ—΄μ˜ 포인터λ₯Ό 전달해야 ν•©λ‹ˆλ‹€. 즉, λ¬Έμžμ—΄μ„ ν°λ”°μ˜΄ν‘œ(")둜 κ°μ‹Έμ„œ μ „λ‹¬ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, λ¬Έμžμ—΄μ˜ 이름을 μ „λ‹¬ν•©λ‹ˆλ‹€.

char message[] = "Hello, World!";
puts(message);

puts ν•¨μˆ˜μ˜ λ°˜ν™˜ 값은 좜λ ₯ μž‘μ—…μ˜ 성곡 μ—¬λΆ€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 좜λ ₯이 μ •μƒμ μœΌλ‘œ μ™„λ£Œλœ 경우 0을 λ°˜ν™˜ν•˜κ³ , 좜λ ₯ 쀑에 였λ₯˜κ°€ λ°œμƒν•œ 경우 EOF (-1)λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

if (puts(message) == EOF) {
    printf("Error occurred during output.\n");
} else {
    printf("Output completed successfully.\n");
}

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κ³ , λ°˜ν™˜ 값을 ν™œμš©ν•˜μ—¬ 좜λ ₯이 μ •μƒμ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆλŠ”μ§€λ₯Ό ν™•μΈν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.

2. gets ν•¨μˆ˜μ˜ μ‚¬μš©λ²•

gets ν•¨μˆ˜λŠ” C μ–Έμ–΄μ—μ„œ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” μž…λ ₯ λ²„νΌμ—μ„œ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λ¬Έμžμ—΄μ„ μ½μ–΄λ“€μž…λ‹ˆλ‹€. μž…λ ₯ 받은 λ¬Έμžμ—΄μ€ λ¬Έμžμ—΄ 배열에 μ €μž₯λ©λ‹ˆλ‹€.

char *gets(char *str);
  • str: μž…λ ₯된 λ¬Έμžμ—΄μ„ μ €μž₯ν•  λ°°μ—΄μ˜ 포인터

gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 단계λ₯Ό λ”°λ₯΄λ©΄ λ©λ‹ˆλ‹€:

  1. μž…λ ₯받은 λ¬Έμžμ—΄μ„ μ €μž₯ν•  배열을 μ„ μ–Έν•©λ‹ˆλ‹€. 이 배열은 λ¬Έμžμ—΄μ„ μ €μž₯ν•˜κΈ°μ— μΆ©λΆ„ν•œ 크기λ₯Ό κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€.
  2. gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μž…λ ₯받은 λ¬Έμžμ—΄μ„ 배열에 μ €μž₯ν•©λ‹ˆλ‹€.

gets ν•¨μˆ˜λŠ” μ‚¬μš©μžκ°€ Enter(κ°œν–‰) ν‚€λ₯Ό λˆ„λ₯Ό λ•ŒκΉŒμ§€ μ‚¬μš©μžμ˜ μž…λ ₯을 κΈ°λ‹€λ¦½λ‹ˆλ‹€. Enter ν‚€λ₯Ό λˆ„λ₯Έ ν›„μ—λŠ” μž…λ ₯ 받은 λ¬Έμžμ—΄μ„ 배열에 μ €μž₯ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜, gets ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ˜ 길이λ₯Ό μ²΄ν¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, μž…λ ₯받은 λ¬Έμžμ—΄μ΄ λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•  κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 버퍼 μ˜€λ²„ν”Œλ‘œμš°μ™€ 같은 λ³΄μ•ˆ 문제λ₯Ό μ•ΌκΈ°ν•  수 μžˆμœΌλ―€λ‘œ, gets ν•¨μˆ˜μ˜ μ‚¬μš©μ€ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λŒ€μ‹ μ—, fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€. fgets ν•¨μˆ˜λŠ” μž…λ ₯ 받을 λ¬Έμžμ—΄μ˜ 길이λ₯Ό 지정할 수 μžˆμ–΄μ„œ, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

char str[100];
fgets(str, sizeof(str), stdin);

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” λ°°μ—΄μ˜ 크기λ₯Ό 100으둜 μ„€μ •ν•˜κ³ , fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κ³  μžˆμŠ΅λ‹ˆλ‹€. sizeof μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°°μ—΄μ˜ 크기λ₯Ό κ΅¬ν•˜κ³ , stdin을 톡해 μ‚¬μš©μžμ˜ μž…λ ₯을 λ°›μŠ΅λ‹ˆλ‹€.

- gets ν•¨μˆ˜λŠ” μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯ 받을 λ¬Έμžμ—΄μ„ λ°›μ•„λ“€μž„

gets ν•¨μˆ˜λŠ” C μ–Έμ–΄μ—μ„œ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” μ‚¬μš©μžκ°€ ν‚€λ³΄λ“œλ‘œ μž…λ ₯ν•œ λ¬Έμžμ—΄μ„ ν”„λ‘œκ·Έλž¨μœΌλ‘œ κ°€μ Έμ˜΅λ‹ˆλ‹€. μž…λ ₯ 받은 λ¬Έμžμ—΄μ€ λ¬Έμžμ—΄ 배열에 μ €μž₯λ©λ‹ˆλ‹€.

gets ν•¨μˆ˜μ˜ μ‚¬μš©λ²•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

char *gets(char *str);
  • str: μž…λ ₯된 λ¬Έμžμ—΄μ„ μ €μž₯ν•  λ°°μ—΄μ˜ 포인터

gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κΈ° μœ„ν•΄μ„œλŠ” μ•„λž˜μ™€ 같은 단계λ₯Ό λ”°λ¦…λ‹ˆλ‹€:

  1. λ¬Έμžμ—΄μ„ μž…λ ₯받을 배열을 μ„ μ–Έν•©λ‹ˆλ‹€. ν•„μš”ν•œ 경우, λ°°μ—΄μ˜ 크기λ₯Ό μ§€μ •ν•˜μ—¬ μ˜€λ²„ν”Œλ‘œμš°λ₯Ό 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.
  2. gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©μžμ˜ μž…λ ₯을 λ¬Έμžμ—΄ 배열에 μ €μž₯ν•©λ‹ˆλ‹€.

μ‚¬μš©μžλŠ” λ¬Έμžμ—΄μ„ μž…λ ₯ν•˜κΈ° μœ„ν•΄ ν‚€λ³΄λ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μž…λ ₯된 λ¬Έμžμ—΄μ€ μ‚¬μš©μžκ°€ Enter ν‚€λ₯Ό λˆ„λ₯Ό λ•ŒκΉŒμ§€ μž…λ ₯ 버퍼에 μ €μž₯λ©λ‹ˆλ‹€. Enter ν‚€λ₯Ό λˆ„λ₯΄λ©΄, μž…λ ₯ 받은 λ¬Έμžμ—΄μ΄ 배열에 μ €μž₯λ©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜, gets ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ˜ 길이λ₯Ό μ²΄ν¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, μž…λ ₯된 λ¬Έμžμ—΄μ΄ λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•  수 μžˆλŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 버퍼 μ˜€λ²„ν”Œλ‘œμš°μ™€ 같은 λ³΄μ•ˆ 문제λ₯Ό μ΄ˆλž˜ν•  수 μžˆμœΌλ―€λ‘œ, gets ν•¨μˆ˜μ˜ μ‚¬μš©μ€ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λŒ€μ‹ μ—, fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€. fgets ν•¨μˆ˜λŠ” μž…λ ₯ 받을 λ¬Έμžμ—΄μ˜ 길이λ₯Ό 지정할 수 μžˆμ–΄μ„œ, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

char str[100];
fgets(str, sizeof(str), stdin);

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” λ°°μ—΄μ˜ 크기λ₯Ό 100으둜 μ„€μ •ν•˜κ³ , fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κ³  μžˆμŠ΅λ‹ˆλ‹€. sizeof μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°°μ—΄μ˜ 크기λ₯Ό κ΅¬ν•˜κ³ , stdin을 톡해 μ‚¬μš©μžμ˜ μž…λ ₯을 λ°›μŠ΅λ‹ˆλ‹€.

- μž…λ ₯된 λ¬Έμžμ—΄μ€ ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λ³€μˆ˜μ— μ €μž₯ν•΄μ•Ό 함

gets ν•¨μˆ˜λ‘œ μž…λ ₯ 받은 λ¬Έμžμ—΄μ€ ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λ³€μˆ˜μ— μ €μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ €μž₯된 λ¬Έμžμ—΄μ„ 이후에 λ‹€λ₯Έ μž‘μ—…μ— ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κ³  λ³€μˆ˜μ— μ €μž₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ•„λž˜μ™€ 같은 단계λ₯Ό λ”°λ¦…λ‹ˆλ‹€:

  1. μž…λ ₯받을 λ¬Έμžμ—΄μ„ μ €μž₯ν•  λ³€μˆ˜λ₯Ό μ„ μ–Έν•©λ‹ˆλ‹€. 이 λ³€μˆ˜λŠ” λ¬Έμžμ—΄μ„ μ €μž₯ν•˜κΈ°μ— μΆ©λΆ„ν•œ 크기λ₯Ό κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€.
  2. gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©μžμ˜ μž…λ ₯을 λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ•„λž˜μ™€ 같이 gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κ³  λ³€μˆ˜μ— μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

char str[100];
gets(str);

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” λ¬Έμžμ—΄μ„ μ €μž₯ν•˜κΈ° μœ„ν•΄ char νƒ€μž…μ˜ 배열인 str을 μ„ μ–Έν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 크기λ₯Ό 100으둜 μ„€μ •ν•œ μ΄μœ λŠ” μž…λ ₯받을 λ¬Έμžμ—΄μ˜ μ˜ˆμƒ 크기에 따라 λ°°μ—΄μ˜ 크기λ₯Ό μ‘°μ •ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λ¬Έμžμ—΄μ„ λ°°μ—΄ str에 μ €μž₯ν•©λ‹ˆλ‹€. 이후에 str λ³€μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ μ €μž₯된 λ¬Έμžμ—΄μ„ λ‹€λ₯Έ μž‘μ—…μ— ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€λ§Œ, gets ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ˜ 길이λ₯Ό μ²΄ν¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 받을 수 μžˆμŠ΅λ‹ˆλ‹€. 이둜 인해 버퍼 μ˜€λ²„ν”Œλ‘œμš°μ™€ 같은 λ³΄μ•ˆ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ, gets ν•¨μˆ˜μ˜ μ‚¬μš©μ€ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹ μ—, fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€. fgets ν•¨μˆ˜λŠ” μž…λ ₯받을 μ΅œλŒ€ λ¬Έμžμ—΄μ˜ 길이λ₯Ό 지정할 수 μžˆμ–΄μ„œ, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

- gets ν•¨μˆ˜μ˜ ν˜•νƒœ: gets(λ³€μˆ˜);

gets ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•νƒœλ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€:

gets(λ³€μˆ˜);
  • gets: λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” ν•¨μˆ˜
  • λ³€μˆ˜: μž…λ ₯된 λ¬Έμžμ—΄μ„ μ €μž₯ν•  λ³€μˆ˜

gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 단계λ₯Ό λ”°λ₯΄λ©΄ λ©λ‹ˆλ‹€:

  1. gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯받을 μ€€λΉ„λ₯Ό ν•©λ‹ˆλ‹€.
  2. μž…λ ₯된 λ¬Έμžμ—΄μ„ μ €μž₯ν•  λ³€μˆ˜λ₯Ό 인자둜 μ „λ‹¬ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ•„λž˜μ™€ 같이 gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯받을 수 μžˆμŠ΅λ‹ˆλ‹€:

char str[100];
gets(str);

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” char νƒ€μž…μ˜ 배열인 str을 μž…λ ₯받을 μ€€λΉ„λ‘œ μ‚¬μš©ν•˜μ—¬ gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μž…λ ₯된 λ¬Έμžμ—΄μ€ str λ³€μˆ˜μ— μ €μž₯λ©λ‹ˆλ‹€.

λ‹€λ§Œ, gets ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ˜ 길이λ₯Ό μ²΄ν¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 받을 수 μžˆμŠ΅λ‹ˆλ‹€. 이둜 인해 버퍼 μ˜€λ²„ν”Œλ‘œμš°μ™€ 같은 λ³΄μ•ˆ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ, gets ν•¨μˆ˜μ˜ μ‚¬μš©μ€ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹ μ—, fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€. fgets ν•¨μˆ˜λŠ” μž…λ ₯받을 μ΅œλŒ€ λ¬Έμžμ—΄μ˜ 길이λ₯Ό 지정할 수 μžˆμ–΄μ„œ, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

gets ν•¨μˆ˜μ˜ ν˜•νƒœ: gets(λ³€μˆ˜);

gets ν•¨μˆ˜λŠ” C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. μž…λ ₯받은 λ¬Έμžμ—΄μ„ λ³€μˆ˜μ— μ €μž₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€. gets ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•νƒœλ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€:

gets(λ³€μˆ˜);
  • gets: μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” ν•¨μˆ˜
  • λ³€μˆ˜: μž…λ ₯된 λ¬Έμžμ—΄μ„ μ €μž₯ν•  λ³€μˆ˜λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κΈ° μœ„ν•΄μ„œλŠ” μ•„λž˜ 단계λ₯Ό λ”°λ¦…λ‹ˆλ‹€:

  1. gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯받을 μ€€λΉ„λ₯Ό ν•©λ‹ˆλ‹€.
  2. μž…λ ₯된 λ¬Έμžμ—΄μ„ μ €μž₯ν•  λ³€μˆ˜λ₯Ό gets ν•¨μˆ˜μ˜ 인자둜 μ „λ‹¬ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ•„λž˜μ™€ 같이 gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯받을 수 μžˆμŠ΅λ‹ˆλ‹€:

char str[100];
gets(str);

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” char νƒ€μž…μ˜ 배열인 str을 μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯받을 μ€€λΉ„λ₯Ό ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. gets ν•¨μˆ˜λŠ” μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λ¬Έμžμ—΄μ„ str λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€.

λ‹€λ§Œ, gets ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ˜ 길이λ₯Ό μ²΄ν¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 받을 수 μžˆμŠ΅λ‹ˆλ‹€. 이둜 인해 버퍼 μ˜€λ²„ν”Œλ‘œμš°μ™€ 같은 λ³΄μ•ˆ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ, gets ν•¨μˆ˜μ˜ μ‚¬μš©μ€ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹ μ—, fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€. fgets ν•¨μˆ˜λŠ” μž…λ ₯받을 μ΅œλŒ€ λ¬Έμžμ—΄μ˜ 길이λ₯Ό 지정할 수 μžˆμ–΄μ„œ, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

3. gets ν•¨μˆ˜ 예제

μ•„λž˜μ˜ μ˜ˆμ œλŠ” gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.

#include <stdio.h>

int main() {
    char str[100];

    printf("λ¬Έμžμ—΄μ„ μž…λ ₯ν•˜μ„Έμš”: ");
    gets(str);

    printf("μž…λ ₯ν•œ λ¬Έμžμ—΄: %s", str);

    return 0;
}

μœ„μ˜ μ˜ˆμ œλŠ” λ‹€μŒκ³Ό 같은 λ™μž‘μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€:

  1. μ‚¬μš©μžμ—κ²Œ λ¬Έμžμ—΄μ„ μž…λ ₯ν•˜λΌλŠ” λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
  2. gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯된 λ¬Έμžμ—΄μ„ str λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€.
  3. str λ³€μˆ˜μ— μ €μž₯된 λ¬Έμžμ—΄μ„ 좜λ ₯ν•©λ‹ˆλ‹€.

gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” μ˜ˆμ œμ—μ„œλŠ” char νƒ€μž…μ˜ 배열인 str을 μ„ μ–Έν•œ ν›„, gets ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›μŠ΅λ‹ˆλ‹€. μž…λ ₯받은 λ¬Έμžμ—΄μ€ str λ³€μˆ˜μ— μ €μž₯되고, 이후에 ν•„μš”μ— 따라 ν•΄λ‹Ή λ¬Έμžμ—΄μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ, gets ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ˜ 길이λ₯Ό μ²΄ν¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 받을 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ, μ‹€μ œ μ‚¬μš©μ—μ„œλŠ” λ³΄μ•ˆμ— μ·¨μ•½ν•œ 점을 κ³ λ €ν•˜μ—¬ λŒ€μ•ˆμΈ fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. fgets ν•¨μˆ˜λŠ” μž…λ ₯받을 μ΅œλŒ€ λ¬Έμžμ—΄μ˜ 길이λ₯Ό 지정할 수 μžˆμ–΄, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

예제: μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›κ³ , μž…λ ₯된 이름을 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨

μ•„λž˜μ˜ μ˜ˆμ œλŠ” μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›κ³ , μž…λ ₯된 이름을 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ λ³΄μ—¬μ€λ‹ˆλ‹€.

#include <stdio.h>

int main() {
    char name[50];

    printf("이름을 μž…λ ₯ν•˜μ„Έμš”: ");
    gets(name);

    printf("μž…λ ₯ν•œ 이름: %s", name);

    return 0;
}

μœ„μ˜ μ˜ˆμ œλŠ” λ‹€μŒκ³Ό 같은 λ™μž‘μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€:

  1. μ‚¬μš©μžμ—κ²Œ 이름을 μž…λ ₯ν•˜λΌλŠ” λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
  2. gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯된 이름을 name λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€.
  3. name λ³€μˆ˜μ— μ €μž₯된 이름을 좜λ ₯ν•©λ‹ˆλ‹€.

이 μ˜ˆμ œμ—μ„œλŠ” char νƒ€μž…μ˜ 배열인 name을 μ„ μ–Έν•˜μ—¬ 이름을 μ €μž₯ν•˜κΈ° μœ„ν•œ 곡간을 ν• λ‹Ήν•©λ‹ˆλ‹€. μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯ λ°›λŠ” λΆ€λΆ„μ—μ„œ gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μž…λ ₯된 이름을 name λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€. κ·Έ ν›„, μ €μž₯된 이름을 좜λ ₯ν•˜κΈ° μœ„ν•΄ printf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

gets ν•¨μˆ˜λŠ” μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›μ§€λ§Œ, μž…λ ₯받은 λ¬Έμžμ—΄μ˜ 길이λ₯Ό μ²΄ν¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 받을 수 μžˆμŠ΅λ‹ˆλ‹€. 이둜 인해 버퍼 μ˜€λ²„ν”Œλ‘œμš°μ™€ 같은 λ³΄μ•ˆ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ, gets ν•¨μˆ˜μ˜ μ‚¬μš©μ€ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ‹€μ œ μ‚¬μš©μ—μ„œλŠ” λŒ€μ•ˆμΈ fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€. fgets ν•¨μˆ˜λŠ” μž…λ ₯받을 μ΅œλŒ€ λ¬Έμžμ—΄μ˜ 길이λ₯Ό 지정할 수 μžˆμ–΄μ„œ, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

μž…λ ₯ μ½”λ“œ: gets(name);

gets(name);은 C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

gets ν•¨μˆ˜λŠ” stdio.h 헀더 νŒŒμΌμ— μ •μ˜λ˜μ–΄ 있고, λ‹€μŒκ³Ό 같은 ꡬ문으둜 μ‚¬μš©λ©λ‹ˆλ‹€:

gets(name);

μ—¬κΈ°μ„œ name은 λ¬Έμžμ—΄μ„ μ €μž₯ν•  char νƒ€μž…μ˜ λ°°μ—΄μž…λ‹ˆλ‹€. gets ν•¨μˆ˜λŠ” μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λ¬Έμžμ—΄μ„ μ €μž₯ν•˜κΈ° μœ„ν•΄ name 배열에 μ €μž₯ν•©λ‹ˆλ‹€.

gets ν•¨μˆ˜λŠ” 곡백을 ν¬ν•¨ν•œ λ¬Έμžμ—΄μ„ μž…λ ₯받을 수 있으며, μ€„λ°”κΏˆ 문자('\n')을 λ§Œλ‚  λ•ŒκΉŒμ§€ μž…λ ₯을 λ°›μŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ, μž…λ ₯받은 λ¬Έμžμ—΄μ„ μžλ™μœΌλ‘œ NULL 문자('\0')둜 끝마쳐 λ¬Έμžμ—΄μ˜ 끝을 ν‘œμ‹œν•©λ‹ˆλ‹€.

gets ν•¨μˆ˜λŠ” μž…λ ₯받은 λ¬Έμžμ—΄μ˜ 길이λ₯Ό μ²΄ν¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 받을 수 μžˆμŠ΅λ‹ˆλ‹€. 이둜 인해 버퍼 μ˜€λ²„ν”Œλ‘œμš°μ™€ 같은 λ³΄μ•ˆ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ, gets ν•¨μˆ˜μ˜ μ‚¬μš©μ€ ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ‹€μ œ μ‚¬μš©μ—μ„œλŠ” λŒ€μ•ˆμΈ fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€. fgets ν•¨μˆ˜λŠ” μž…λ ₯받을 μ΅œλŒ€ λ¬Έμžμ—΄μ˜ 길이λ₯Ό 지정할 수 μžˆμ–΄μ„œ, λ°°μ—΄μ˜ 크기λ₯Ό μ΄ˆκ³Όν•˜λŠ” μž…λ ₯을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

좜λ ₯ μ½”λ“œ: puts(name);

puts(name);은 C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” stdio.h 헀더 νŒŒμΌμ— μ •μ˜λ˜μ–΄ 있고, λ‹€μŒκ³Ό 같은 ꡬ문으둜 μ‚¬μš©λ©λ‹ˆλ‹€:

puts(name);

μ—¬κΈ°μ„œ name은 좜λ ₯ν•  λ¬Έμžμ—΄μ΄ μ €μž₯된 char λ°°μ—΄μž…λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” name 배열에 μ €μž₯된 λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•œ ν›„ μžλ™μœΌλ‘œ μ€„λ°”κΏˆ 문자('\n')을 좜λ ₯ν•˜μ—¬ λ‹€μŒ 좜λ ₯이 μƒˆλ‘œμš΄ μ€„μ—μ„œ μ‹œμž‘λ˜λ„λ‘ ν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κΈ° μœ„ν•΄ printf ν•¨μˆ˜λ³΄λ‹€ κ°„λ‹¨ν•œ 문법을 μ‚¬μš©ν•˜λ©°, λ¬Έμžμ—΄λ§Œ 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ puts ν•¨μˆ˜λŠ” 포맷 μ§€μ •μžλ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μ–‘ν•œ ν˜•μ‹μ˜ 데이터λ₯Ό 좜λ ₯ν•˜λŠ” printf ν•¨μˆ˜λ³΄λ‹€ κ°„λ‹¨ν•˜κ²Œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” 좜λ ₯ κ²°κ³Όλ₯Ό μžλ™μœΌλ‘œ λ‹€μŒ μ€„λ‘œ μ΄λ™μ‹œν‚€κΈ° λ•Œλ¬Έμ—, μ€„λ°”κΏˆ κΈ°λŠ₯이 ν•„μš”ν•œ 경우 μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

좜λ ₯ μ½”λ“œ: puts(name);

puts(name);은 C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

이 μ½”λ“œλŠ” stdio.h 헀더 νŒŒμΌμ— μ •μ˜λœ puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•©λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κ³  μžλ™μœΌλ‘œ 쀄을 λ°”κΎΈλŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” ꡬ문은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

puts(name);

μ—¬κΈ°μ„œ name은 좜λ ₯ν•  λ¬Έμžμ—΄μ΄ μ €μž₯된 char λ°°μ—΄μž…λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” name 배열에 μ €μž₯된 λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜μ˜ κΈ°λŠ₯을 μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ¬Έμžμ—΄μ˜ νŠΉμ„±μ„ μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€. C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ¬Έμžμ—΄μ€ char νƒ€μž…μ˜ λ°°μ—΄λ‘œ ν‘œν˜„λ©λ‹ˆλ‹€. λ¬Έμžμ—΄μ€ λ¬Έμžλ“€μ˜ μ—°μ†λœ μ‹œν€€μŠ€μ΄λ©°, λ¬Έμžμ—΄μ˜ λμ—λŠ” NULL 문자('\0')κ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. 이 NULL λ¬ΈμžλŠ” λ¬Έμžμ—΄μ˜ 끝을 λ‚˜νƒ€λ‚΄λŠ” νŠΉλ³„ν•œ λ¬Έμžμž…λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” 배열에 μ €μž₯된 λ¬Έμžμ—΄μ„ 좜λ ₯ν•  λ•Œ, λ¬Έμžμ—΄μ˜ 끝에 μžˆλŠ” NULL 문자λ₯Ό λ§Œλ‚  λ•ŒκΉŒμ§€ 문자λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. 그리고 좜λ ₯이 λλ‚˜λ©΄ μžλ™μœΌλ‘œ μ€„λ°”κΏˆ 문자('\n')λ₯Ό 좜λ ₯ν•˜μ—¬ 쀄을 λ°”κΏ‰λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄λ§Œ 좜λ ₯ν•  수 있으며, 포맷 μ§€μ •μžλ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€λ₯Έ ν˜•μ‹μ˜ 데이터λ₯Ό 좜λ ₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ puts ν•¨μˆ˜λŠ” κ°„λ‹¨νžˆ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” κ²½μš°μ— μ‚¬μš©λ©λ‹ˆλ‹€.

puts ν•¨μˆ˜μ˜ μ‚¬μš©λ²•μ€ printf ν•¨μˆ˜λ³΄λ‹€ κ°„λ‹¨ν•˜κ³  μ§κ΄€μ μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ puts ν•¨μˆ˜λŠ” μ€„λ°”κΏˆ κΈ°λŠ₯이 μžλ™μœΌλ‘œ ν¬ν•¨λ˜μ–΄ 있기 λ•Œλ¬Έμ—, μ€„λ°”κΏˆμ΄ ν•„μš”ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” λ‹€λ₯Έ 좜λ ₯ ν•¨μˆ˜λ₯Ό μ„ νƒν•˜λŠ” 것이 더 λ‚˜μ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

좜λ ₯ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ, puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯받은 λ¬Έμžμ—΄μ„ μ²˜λ¦¬ν•  λ•ŒλŠ” gets ν•¨μˆ˜μ˜ μ‚¬μš©μ„ ν”Όν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. gets ν•¨μˆ˜λŠ” μ‚¬μš©μžμ˜ μž…λ ₯ 길이λ₯Ό μ²΄ν¬ν•˜μ§€ μ•Šκ³ , 버퍼 μ˜€λ²„ν”Œλ‘œμš°μ™€ 같은 λ³΄μ•ˆ 문제λ₯Ό μœ λ°œν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. λŒ€μ‹ μ— fgets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μž…λ ₯ 길이λ₯Ό μ œν•œν•˜κ³  μ•ˆμ „ν•˜κ²Œ λ¬Έμžμ—΄μ„ μž…λ ₯받을 수 μžˆμŠ΅λ‹ˆλ‹€.

4. puts ν•¨μˆ˜μ˜ μ‚¬μš©λ²•

puts ν•¨μˆ˜λŠ” C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. λ‹€μŒμ€ puts ν•¨μˆ˜μ˜ μ‚¬μš©λ²•μ— λŒ€ν•œ μƒμ„Έν•œ μ„€λͺ…μž…λ‹ˆλ‹€.

puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” ꡬ문은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

puts(str);

μ—¬κΈ°μ„œ str은 좜λ ₯ν•  λ¬Έμžμ—΄μ„ μ €μž₯ν•œ char λ°°μ—΄μ΄λ‚˜ ν¬μΈν„°μž…λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” 주어진 λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•©λ‹ˆλ‹€. 좜λ ₯ν•œ ν›„ μžλ™μœΌλ‘œ 쀄이 λ°”λ€Œκ²Œ λ©λ‹ˆλ‹€. μ΄λŠ” puts ν•¨μˆ˜κ°€ λ¬Έμžμ—΄μ„ 좜λ ₯ν•œ 뒀에 μžλ™μœΌλ‘œ μ€„λ°”κΏˆ 문자('\n')λ₯Ό 좜λ ₯ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

puts ν•¨μˆ˜μ— μ „λ‹¬λœ λ¬Έμžμ—΄μ€ NULL 문자('\0')κ°€ λ‚˜μ˜¬ λ•ŒκΉŒμ§€ 좜λ ₯λ©λ‹ˆλ‹€. λ”°λΌμ„œ λ¬Έμžμ—΄μ˜ λμ—λŠ” λ°˜λ“œμ‹œ NULL λ¬Έμžκ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. NULL λ¬Έμžκ°€ μ—†λŠ” 경우, puts ν•¨μˆ˜λŠ” μ •μƒμ μœΌλ‘œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜μ§€ λͺ»ν•˜κ³  예기치 μ•Šμ€ λ™μž‘μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄λ§Œ 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ νƒ€μž…μ˜ 데이터λ₯Ό 좜λ ₯ν•˜κ±°λ‚˜ 포맷 μ§€μ •μžλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ κ²½μš°μ—λŠ” printf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” μ‚¬μš©ν•˜κΈ° κ°„λ‹¨ν•˜κ³  직관적인 ν•¨μˆ˜μž…λ‹ˆλ‹€. μ€„λ°”κΏˆ κΈ°λŠ₯을 μžλ™μœΌλ‘œ μ²˜λ¦¬ν•˜κΈ° λ•Œλ¬Έμ—, μ€„λ°”κΏˆμ΄ ν•„μš”ν•œ κ²½μš°μ— μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ€„λ°”κΏˆμ΄ ν•„μš”ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” λ‹€λ₯Έ 좜λ ₯ ν•¨μˆ˜λ₯Ό μ„ νƒν•˜λŠ” 것이 더 μ μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κΈ° μœ„ν•΄ stdio.h 헀더 νŒŒμΌμ— μ •μ˜λ˜μ–΄ 있으며, C ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ— ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 즉, stdio.h 헀더 νŒŒμΌμ„ μΆ”κ°€λ‘œ ν¬ν•¨μ‹œν‚€μ§€ μ•Šκ³ λ„ puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” 인자둜 μ „λ‹¬λœ λ¬Έμžμ—΄μ„ 화면에 좜λ ₯함

puts ν•¨μˆ˜λŠ” C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” 인자둜 μ „λ‹¬λœ λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•©λ‹ˆλ‹€. λ‹€μŒμ€ puts ν•¨μˆ˜μ˜ μ‚¬μš©λ²•μ— λŒ€ν•œ μƒμ„Έν•œ μ„€λͺ…μž…λ‹ˆλ‹€.

puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” ꡬ문은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

puts(str);

μ—¬κΈ°μ„œ str은 좜λ ₯ν•  λ¬Έμžμ—΄μ„ μ €μž₯ν•œ char λ°°μ—΄μ΄λ‚˜ ν¬μΈν„°μž…λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” 주어진 λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•©λ‹ˆλ‹€. 좜λ ₯ν•œ ν›„ μžλ™μœΌλ‘œ 쀄이 λ°”λ€Œκ²Œ λ©λ‹ˆλ‹€. μ΄λŠ” puts ν•¨μˆ˜κ°€ λ¬Έμžμ—΄μ„ 좜λ ₯ν•œ 뒀에 μžλ™μœΌλ‘œ μ€„λ°”κΏˆ 문자('\n')λ₯Ό 좜λ ₯ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

puts ν•¨μˆ˜μ— μ „λ‹¬λœ λ¬Έμžμ—΄μ€ NULL 문자('\0')κ°€ λ‚˜μ˜¬ λ•ŒκΉŒμ§€ 좜λ ₯λ©λ‹ˆλ‹€. λ”°λΌμ„œ λ¬Έμžμ—΄μ˜ λμ—λŠ” λ°˜λ“œμ‹œ NULL λ¬Έμžκ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. NULL λ¬Έμžκ°€ μ—†λŠ” 경우, puts ν•¨μˆ˜λŠ” μ •μƒμ μœΌλ‘œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜μ§€ λͺ»ν•˜κ³  예기치 μ•Šμ€ λ™μž‘μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄λ§Œ 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ νƒ€μž…μ˜ 데이터λ₯Ό 좜λ ₯ν•˜κ±°λ‚˜ 포맷 μ§€μ •μžλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ κ²½μš°μ—λŠ” printf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” μ‚¬μš©ν•˜κΈ° κ°„λ‹¨ν•˜κ³  직관적인 ν•¨μˆ˜μž…λ‹ˆλ‹€. μ€„λ°”κΏˆ κΈ°λŠ₯을 μžλ™μœΌλ‘œ μ²˜λ¦¬ν•˜κΈ° λ•Œλ¬Έμ—, μ€„λ°”κΏˆμ΄ ν•„μš”ν•œ κ²½μš°μ— μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ€„λ°”κΏˆμ΄ ν•„μš”ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” λ‹€λ₯Έ 좜λ ₯ ν•¨μˆ˜λ₯Ό μ„ νƒν•˜λŠ” 것이 더 μ μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κΈ° μœ„ν•΄ stdio.h 헀더 νŒŒμΌμ— μ •μ˜λ˜μ–΄ 있으며, C ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ— ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 즉, stdio.h 헀더 νŒŒμΌμ„ μΆ”κ°€λ‘œ ν¬ν•¨μ‹œν‚€μ§€ μ•Šκ³ λ„ puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ¬Έμžμ—΄μ€ λ”°μ˜΄ν‘œ("")둜 감싸져야 함

λ¬Έμžμ—΄μ€ C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν…μŠ€νŠΈλ₯Ό μ²˜λ¦¬ν•˜λŠ” 방법 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. λ¬Έμžμ—΄μ€ μž‘μ€λ”°μ˜΄ν‘œ('') λŒ€μ‹  ν°λ”°μ˜΄ν‘œ("")둜 감싸져야 ν•©λ‹ˆλ‹€. ν°λ”°μ˜΄ν‘œλ₯Ό μ‚¬μš©ν•¨μœΌλ‘œμ¨ C μ»΄νŒŒμΌλŸ¬μ—κ²Œ ν•΄λ‹Ή λ‚΄μš©μ΄ λ¬Έμžμ—΄μž„μ„ μ•Œλ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€.

char str[] = "Hello, World!";

μœ„μ˜ μ˜ˆμ œμ—μ„œ str은 λ¬Έμžμ—΄μ„ μ €μž₯ν•˜κΈ° μœ„ν•œ char λ°°μ—΄μž…λ‹ˆλ‹€. λ¬Έμžμ—΄μ€ ν°λ”°μ˜΄ν‘œλ‘œ 감싸져 있으며, 배열에 μ €μž₯λ©λ‹ˆλ‹€.

C μ–Έμ–΄μ—μ„œ λ¬Έμžμ—΄μ€ NULL 문자('\0')둜 μ’…λ£Œλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. λ”°λΌμ„œ λ¬Έμžμ—΄μ˜ λμ—λŠ” λ°˜λ“œμ‹œ NULL λ¬Έμžκ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. C μ»΄νŒŒμΌλŸ¬λŠ” NULL 문자λ₯Ό λ¬Έμžμ—΄μ˜ 끝으둜 μΈμ‹ν•˜μ—¬ λ¬Έμžμ—΄μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

char str[] = "Hello, World!"; // μ˜¬λ°”λ₯Έ λ¬Έμžμ—΄ μ„ μ–Έ

char str[] = "Hello, World!"; // μ˜¬λ°”λ₯Έ λ¬Έμžμ—΄ μ„ μ–Έ
char str[] = 'Hello, World!'; // 였λ₯˜: μž‘μ€λ”°μ˜΄ν‘œ μ‚¬μš© λΆˆκ°€

μ£Όμ˜ν•  점은 λ¬Έμžμ—΄μ€ μž‘μ€λ”°μ˜΄ν‘œλ‘œ 감싸지지 μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μž‘μ€λ”°μ˜΄ν‘œλŠ” 문자(character)λ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.

λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” ν•¨μˆ˜μΈ putsλ₯Ό μ‚¬μš©ν•  λ•Œλ„ λ™μΌν•œ κ·œμΉ™μ΄ μ μš©λ©λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ ν°λ”°μ˜΄ν‘œλ‘œ κ°μ‹Έμ•Όλ§Œ ν•©λ‹ˆλ‹€. μž‘μ€λ”°μ˜΄ν‘œλŠ” 문자(character)λ₯Ό 좜λ ₯ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€.

char str[] = "Hello, World!";
puts(str); // μ˜¬λ°”λ₯Έ 좜λ ₯

char str[] = 'Hello, World!';
puts(str); // 였λ₯˜: μž‘μ€λ”°μ˜΄ν‘œ μ‚¬μš© λΆˆκ°€

λ”°λΌμ„œ, λ¬Έμžμ—΄μ€ 항상 ν°λ”°μ˜΄ν‘œ("")둜 감싸져야 ν•˜λ©°, μž‘μ€λ”°μ˜΄ν‘œ('')λŠ” 문자(character)λ₯Ό ν‘œν˜„ν•˜λŠ” 데 μ‚¬μš©ν•΄μ•Ό 함을 λͺ…심해야 ν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜μ˜ ν˜•νƒœ: puts("λ¬Έμžμ—΄");

puts ν•¨μˆ˜λŠ” C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•νƒœλ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€:

puts("λ¬Έμžμ—΄");

μ—¬κΈ°μ„œ "λ¬Έμžμ—΄"은 좜λ ₯ν•  λ¬Έμžμ—΄μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. λ¬Έμžμ—΄μ€ ν°λ”°μ˜΄ν‘œ("")둜 감싸져야 ν•©λ‹ˆλ‹€.

puts ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ 인자둜 μ „λ‹¬λœ λ¬Έμžμ—΄μ΄ 화면에 좜λ ₯λ©λ‹ˆλ‹€. 좜λ ₯된 ν›„μ—λŠ” μžλ™μœΌλ‘œ 쀄이 λ°”λ€λ‹ˆλ‹€. μ΄λŠ” puts ν•¨μˆ˜κ°€ λ¬Έμžμ—΄μ„ 좜λ ₯ν•œ λ’€ μžλ™μœΌλ‘œ μ€„λ°”κΏˆ 문자('\n')λ₯Ό 좜λ ₯ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, λ‹€μŒκ³Ό 같이 puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

puts("Hello, World!");

μœ„μ˜ μ˜ˆμ œμ—μ„œ "Hello, World!"λΌλŠ” λ¬Έμžμ—΄μ΄ 화면에 좜λ ₯λ©λ‹ˆλ‹€.

μ£Όμ˜ν•  점은 λ¬Έμžμ—΄μ€ 항상 ν°λ”°μ˜΄ν‘œ("")둜 감싸져야 ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μž‘μ€λ”°μ˜΄ν‘œ('')λŠ” 문자(character)λ₯Ό ν‘œν˜„ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κΈ° μœ„ν•΄ stdio.h 헀더 νŒŒμΌμ— μ •μ˜λ˜μ–΄ 있으며, C ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ— ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ³„λ„μ˜ μΆ”κ°€ 섀정이 ν•„μš”ν•˜μ§€ μ•Šκ³ , stdio.h 헀더 νŒŒμΌμ„ ν¬ν•¨μ‹œν‚€μ§€ μ•Šμ•„λ„ puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜μ˜ μ‚¬μš©μ€ κ°„λ‹¨ν•˜κ³  μ§κ΄€μ μž…λ‹ˆλ‹€. μ€„λ°”κΏˆμ΄ μžλ™μœΌλ‘œ 처리되기 λ•Œλ¬Έμ— μ€„λ°”κΏˆμ΄ ν•„μš”ν•œ κ²½μš°μ— μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ, μ€„λ°”κΏˆμ΄ ν•„μš”ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” λ‹€λ₯Έ 좜λ ₯ ν•¨μˆ˜λ₯Ό μ„ νƒν•˜λŠ” 것이 더 μ μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜μ˜ ν˜•νƒœ: puts("λ¬Έμžμ—΄");

puts ν•¨μˆ˜λŠ” C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

ν˜•νƒœ

puts("λ¬Έμžμ—΄");

μ„€λͺ…

puts ν•¨μˆ˜λŠ” 인자둜 μ „λ‹¬λœ λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•©λ‹ˆλ‹€. 이 λ•Œ, 좜λ ₯된 ν›„μ—λŠ” μžλ™μœΌλ‘œ 쀄이 λ°”λ€λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•œ λ’€ μžλ™μœΌλ‘œ μ€„λ°”κΏˆ 문자('\n')λ₯Ό 좜λ ₯ν•˜λŠ” κΈ°λŠ₯을 가지고 μžˆμŠ΅λ‹ˆλ‹€.

인자

  • "λ¬Έμžμ—΄": 좜λ ₯ν•  λ¬Έμžμ—΄μ„ λ‚˜νƒ€λ‚΄λŠ” μΈμžμž…λ‹ˆλ‹€. λ¬Έμžμ—΄μ€ ν°λ”°μ˜΄ν‘œ("")둜 감싸져야 ν•©λ‹ˆλ‹€.

예제

λ‹€μŒμ€ puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€:

puts("Hello, World!");

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” "Hello, World!"λΌλŠ” λ¬Έμžμ—΄μ΄ 화면에 좜λ ₯λ©λ‹ˆλ‹€.

μ£Όμ˜μ‚¬ν•­

  • λ¬Έμžμ—΄μ€ 항상 ν°λ”°μ˜΄ν‘œ("")둜 감싸져야 ν•©λ‹ˆλ‹€. μž‘μ€λ”°μ˜΄ν‘œ('')λŠ” 문자(character)λ₯Ό ν‘œν˜„ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€.
  • puts ν•¨μˆ˜λŠ” stdio.h 헀더 νŒŒμΌμ— μ •μ˜λ˜μ–΄ 있으며, C ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ— ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • μ€„λ°”κΏˆμ΄ μžλ™μœΌλ‘œ 처리되기 λ•Œλ¬Έμ— μ€„λ°”κΏˆμ΄ ν•„μš”ν•œ 경우 μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ, μ€„λ°”κΏˆμ΄ ν•„μš”ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” λ‹€λ₯Έ 좜λ ₯ ν•¨μˆ˜λ₯Ό μ„ νƒν•˜λŠ” 것이 더 μ μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    5. puts ν•¨μˆ˜ 예제

λ‹€μŒμ€ puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€:

#include <stdio.h>

int main() {
    puts("Hello, World!");

    return 0;
}

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” "Hello, World!"λΌλŠ” λ¬Έμžμ—΄μ΄ 화면에 좜λ ₯λ©λ‹ˆλ‹€.

μ•žμ„œ μ„€λͺ…ν•œ λŒ€λ‘œ, puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 인자둜 μ „λ‹¬λœ λ¬Έμžμ—΄μ€ ν°λ”°μ˜΄ν‘œ("")둜 감싸져야 ν•˜λ©°, 좜λ ₯된 ν›„μ—λŠ” μžλ™μœΌλ‘œ μ€„λ°”λ€œμ΄ μ²˜λ¦¬λ©λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” stdio.h 헀더 νŒŒμΌμ„ ν¬ν•¨μ‹œμΌœ puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, main ν•¨μˆ˜μ—μ„œ puts ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ "Hello, World!"λΌλŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. main ν•¨μˆ˜λŠ” C ν”„λ‘œκ·Έλž¨μ˜ μ‹œμž‘μ μ΄λ©°, puts ν•¨μˆ˜μ˜ ν˜ΈμΆœμ€ main ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 이루어져야 ν•©λ‹ˆλ‹€.

이 예제λ₯Ό μ»΄νŒŒμΌν•˜κ³  μ‹€ν–‰ν•˜λ©΄, 화면에 "Hello, World!"λΌλŠ” λ¬Έμžμ—΄μ΄ 좜λ ₯λ©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” μ€„λ°”κΏˆ 문자('\n')λ₯Ό 좜λ ₯ν•˜λŠ” κΈ°λŠ₯을 가지고 있기 λ•Œλ¬Έμ—, 좜λ ₯된 λ¬Έμžμ—΄ λ‹€μŒμ—λŠ” μƒˆλ‘œμš΄ μ€„μ—μ„œ λ‹€μŒ 좜λ ₯을 μ§„ν–‰ν•©λ‹ˆλ‹€. λ•Œλ¬Έμ—, μœ„μ˜ μ˜ˆμ œμ—μ„œ "Hello, World!" λ‹€μŒμ—λŠ” 빈 쀄이 좜λ ₯λ©λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œλŠ” puts ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ κ°„λ‹¨ν•œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” μ€„λ°”κΏˆμ΄ μžλ™μœΌλ‘œ 처리되기 λ•Œλ¬Έμ—, μ€„λ°”κΏˆμ΄ ν•„μš”ν•œ 경우 μ‚¬μš©ν•˜κΈ° νŽΈλ¦¬ν•œ ν•¨μˆ˜μž…λ‹ˆλ‹€. λ‹€λ§Œ, μ€„λ°”κΏˆμ΄ ν•„μš”ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” λ‹€λ₯Έ 좜λ ₯ ν•¨μˆ˜λ₯Ό μ„ νƒν•˜λŠ” 것이 더 μ μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예제: "Hello, World!"λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨

λ‹€μŒμ€ C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ "Hello, World!"λ₯Ό 좜λ ₯ν•˜λŠ” κ°„λ‹¨ν•œ μ˜ˆμ œμž…λ‹ˆλ‹€.

#include <stdio.h>

int main() {
    puts("Hello, World!");

    return 0;
}

μœ„μ˜ μ½”λ“œλŠ” stdio.h 헀더 νŒŒμΌμ„ ν¬ν•¨μ‹œν‚€κ³  main ν•¨μˆ˜λ₯Ό μ •μ˜ν•œ λ’€, puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ "Hello, World!"λΌλŠ” λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

C ν”„λ‘œκ·Έλž¨μ€ main ν•¨μˆ˜κ°€ μ‹œμž‘μ μž…λ‹ˆλ‹€. μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” main ν•¨μˆ˜κ°€ μ •μ˜λ˜μ–΄ 있으며, puts ν•¨μˆ˜ ν˜ΈμΆœμ„ ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” stdio.h 헀더 νŒŒμΌμ— μ •μ˜λ˜μ–΄ 있으며, C ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ— ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” κΈ°λŠ₯을 가지고 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” puts ν•¨μˆ˜μ˜ 인자둜 "Hello, World!"λΌλŠ” λ¬Έμžμ—΄μ„ μ „λ‹¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμžμ—΄μ€ ν°λ”°μ˜΄ν‘œ("")둜 감싸져 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•œ λ’€ μžλ™μœΌλ‘œ 쀄이 λ°”λ€λ‹ˆλ‹€.

ν”„λ‘œκ·Έλž¨μ„ μ»΄νŒŒμΌν•˜κ³  μ‹€ν–‰ν•˜λ©΄, 화면에 "Hello, World!"κ°€ 좜λ ₯λ©λ‹ˆλ‹€. λ˜ν•œ, main ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μœΌλ‘œ 0이 μ „λ‹¬λ˜μ–΄ ν”„λ‘œκ·Έλž¨μ΄ μ •μƒμ μœΌλ‘œ μ’…λ£Œλ©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” μ€„λ°”κΏˆμ΄ μžλ™μœΌλ‘œ 처리되기 λ•Œλ¬Έμ—, 좜λ ₯된 λ¬Έμžμ—΄ λ‹€μŒμ—λŠ” μƒˆλ‘œμš΄ μ€„μ—μ„œ λ‹€μŒ 좜λ ₯을 μ§„ν–‰ν•©λ‹ˆλ‹€. λ•Œλ¬Έμ—, μœ„μ˜ μ˜ˆμ œμ—μ„œ "Hello, World!" λ‹€μŒμ—λŠ” 빈 쀄이 좜λ ₯λ©λ‹ˆλ‹€.

이 μ˜ˆμ œλŠ” C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ "Hello, World!"λ₯Ό 좜λ ₯ν•˜λŠ” 기본적인 μ˜ˆμ œμž…λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” μ€„λ°”κΏˆμ΄ μžλ™μœΌλ‘œ 처리되기 λ•Œλ¬Έμ—, μ€„λ°”κΏˆμ΄ ν•„μš”ν•œ 경우 μ‚¬μš©ν•˜κΈ° νŽΈλ¦¬ν•©λ‹ˆλ‹€. λ‹€λ§Œ, μ€„λ°”κΏˆμ΄ ν•„μš”ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” λ‹€λ₯Έ 좜λ ₯ ν•¨μˆ˜λ₯Ό μ„ νƒν•˜λŠ” 것이 더 μ μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€.

좜λ ₯ μ½”λ“œ: puts("Hello, World!");

μœ„μ˜ 좜λ ₯ μ½”λ“œμΈ puts("Hello, World!");λŠ” C ν”„λ‘œκ·Έλž¨μ—μ„œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” stdio.h 헀더 νŒŒμΌμ— μ •μ˜λ˜μ–΄ 있으며, C ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ— ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” μ€„λ°”κΏˆμ΄ μžλ™μœΌλ‘œ μ²˜λ¦¬λ˜λŠ” κΈ°λŠ₯을 가지고 μžˆμ–΄ νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” puts ν•¨μˆ˜μ˜ 인자둜 "Hello, World!"λΌλŠ” λ¬Έμžμ—΄μ„ μ „λ‹¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμžμ—΄μ€ ν°λ”°μ˜΄ν‘œ("")둜 감싸져 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. λ”°λΌμ„œ, puts("Hello, World!"); μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ "Hello, World!"λΌλŠ” λ¬Έμžμ—΄μ΄ 화면에 좜λ ₯λ©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•œ λ’€ μžλ™μœΌλ‘œ μ€„λ°”κΏˆ 처리λ₯Ό ν•΄μ€λ‹ˆλ‹€. λ•Œλ¬Έμ—, μœ„μ˜ μ˜ˆμ œμ—μ„œ "Hello, World!" λ‹€μŒμ—λŠ” μƒˆλ‘œμš΄ μ€„μ—μ„œ λ‹€μŒ 좜λ ₯이 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. λ”°λΌμ„œ, "Hello, World!" λ‹€μŒμ—λŠ” 빈 쀄이 좜λ ₯λ©λ‹ˆλ‹€.

μœ„μ˜ 좜λ ₯ μ½”λ“œλŠ” C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ¬Έμžμ—΄μ„ κ°„λ‹¨ν•˜κ²Œ 좜λ ₯ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” μ€„λ°”κΏˆμ΄ μžλ™μœΌλ‘œ 처리되기 λ•Œλ¬Έμ—, 좜λ ₯ 결과에 μ€„λ°”κΏˆμ΄ ν•„μš”ν•œ 경우 μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ, μ€„λ°”κΏˆμ΄ ν•„μš”ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” λ‹€λ₯Έ 좜λ ₯ ν•¨μˆ˜λ₯Ό μ„ νƒν•˜λŠ” 것이 더 μ μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€.

좜λ ₯ μ½”λ“œ: puts("Hello, World!");

puts("Hello, World!");λŠ” C ν”„λ‘œκ·Έλž¨μ—μ„œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” C μ–Έμ–΄μ—μ„œ λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•˜λŠ” ν•¨μˆ˜μ΄λ©°, stdio.h 헀더 νŒŒμΌμ— μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” μš΄μ˜μ²΄μ œκ°€ μ œκ³΅ν•˜λŠ” 좜λ ₯ μž₯μΉ˜μ— 따라 λ¬Έμžμ—΄μ„ μ μ ˆν•œ λ°©μ‹μœΌλ‘œ 좜λ ₯ν•΄μ€λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ "Hello, World!"λΌλŠ” λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 인자둜 λ°›μœΌλ©°, 큰 λ”°μ˜΄ν‘œλ‘œ λ¬Άμ—¬ μžˆλŠ” λ¬Έμžμ—΄μ„ 인자둜 μ „λ‹¬ν•©λ‹ˆλ‹€.

λ¬Έμžμ—΄ 좜λ ₯을 μœ„ν•΄ puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • puts ν•¨μˆ˜λŠ” μ€„λ°”κΏˆμ„ μžλ™μœΌλ‘œ μ²˜λ¦¬ν•΄μ£ΌκΈ° λ•Œλ¬Έμ—, κ°œν–‰ 문자λ₯Ό λ”°λ‘œ μΆ”κ°€ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.
  • puts ν•¨μˆ˜λŠ” 좜λ ₯ κ²°κ³Όλ₯Ό μžλ™μœΌλ‘œ κ°œν–‰ν•˜μ—¬ 가독성을 λ†’μ—¬μ€λ‹ˆλ‹€.

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ "Hello, World!"λΌλŠ” λ¬Έμžμ—΄μ΄ 화면에 좜λ ₯λ©λ‹ˆλ‹€. 좜λ ₯된 λ¬Έμžμ—΄ λ‹€μŒμ—λŠ” μžλ™ κ°œν–‰μ΄ μˆ˜ν–‰λ˜μ–΄ 빈 쀄이 좜λ ₯λ©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ νŠΉμ„±μœΌλ‘œ 인해, puts ν•¨μˆ˜λŠ” κ°„λ‹¨ν•œ λ¬Έμžμ—΄ 좜λ ₯에 많이 μ‚¬μš©λ˜μ§€λ§Œ, λ¬Έμžμ—΄ μ΄μ™Έμ˜ 데이터λ₯Ό 좜λ ₯ν•˜κΈ°μ—λŠ” λΆ€μ μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμžμ—΄ μ΄μ™Έμ˜ 데이터λ₯Ό 좜λ ₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” printf ν•¨μˆ˜ λ“± λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œλŠ” C ν”„λ‘œκ·Έλž˜λ°μ—μ„œ "Hello, World!"λ₯Ό 좜λ ₯ν•˜λŠ” 기본적인 μ˜ˆμ œμž…λ‹ˆλ‹€. puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ€„λ°”κΏˆμ΄ μžλ™μœΌλ‘œ μ²˜λ¦¬λ˜λŠ” λ¬Έμžμ—΄ 좜λ ₯을 μ‰½κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©μž μž…λ ₯ λ°›κΈ°: gets

C ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” ν•¨μˆ˜μΈ gets에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

gets ν•¨μˆ˜λŠ” stdio.h 헀더 νŒŒμΌμ— μ •μ˜λ˜μ–΄ 있으며, λ¬Έμžμ—΄μ„ μž…λ ₯λ°›μ•„μ„œ 버퍼에 μ €μž₯ν•©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ λ¬Έμžμ—΄μ„ μž…λ ₯ν•˜κΈ° μ „κΉŒμ§€ gets ν•¨μˆ˜λŠ” μž…λ ₯ λŒ€κΈ° μƒνƒœμ— λ¨Έλ¬΄λ¦…λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μ€„λ°”κΏˆ 문자λ₯Ό μž…λ ₯ν•˜λ©΄, μž…λ ₯된 λ¬Έμžμ—΄μ„ 버퍼에 μ €μž₯ν•˜κ³  더 이상 μž…λ ₯을 받지 μ•ŠμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›λŠ” κ°„λ‹¨ν•œ μ˜ˆμ œμž…λ‹ˆλ‹€:

#include <stdio.h>

int main() {
    char name[20];

    printf("이름을 μž…λ ₯ν•˜μ„Έμš”: ");
    gets(name);

    printf("μ•ˆλ…•ν•˜μ„Έμš”, %sλ‹˜!\n", name);

    return 0;
}

μœ„ μ˜ˆμ œμ—μ„œλŠ” char name[20];을 μ‚¬μš©ν•˜μ—¬ 20개의 문자λ₯Ό μ €μž₯ν•  수 μžˆλŠ” λ¬Έμžμ—΄ 배열인 name을 μ •μ˜ν•©λ‹ˆλ‹€. μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯받은 이름을 μ €μž₯ν•˜κΈ° μœ„ν•΄ 이 배열을 μ‚¬μš©ν•©λ‹ˆλ‹€.

printf ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ "이름을 μž…λ ₯ν•˜μ„Έμš”: " λ©”μ‹œμ§€λ₯Ό 화면에 좜λ ₯ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ, gets(name);을 μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄μ„ μž…λ ₯λ°›μŠ΅λ‹ˆλ‹€. μž…λ ₯된 λ¬Έμžμ—΄μ€ name 배열에 μ €μž₯λ©λ‹ˆλ‹€.

printf ν•¨μˆ˜λ₯Ό λ‹€μ‹œ μ‚¬μš©ν•˜μ—¬ "μ•ˆλ…•ν•˜μ„Έμš”, %sλ‹˜!" λ©”μ‹œμ§€λ₯Ό 화면에 좜λ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ %sλŠ” λ¬Έμžμ—΄μ˜ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν˜•μ‹ μ§€μ •μžμž…λ‹ˆλ‹€. %sλŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•  μœ„μΉ˜λ‘œ λŒ€μ²΄λ  κ²ƒμž…λ‹ˆλ‹€. λ”°λΌμ„œ, printf("μ•ˆλ…•ν•˜μ„Έμš”, %sλ‹˜!\n", name); μ½”λ“œμ—μ„œλŠ” name 배열에 μ €μž₯된 λ¬Έμžμ—΄μ„ 좜λ ₯ν•©λ‹ˆλ‹€.

μ΄λ ‡κ²Œν•˜λ©΄ μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›μ•„ 좜λ ₯ν•˜λŠ” κ°„λ‹¨ν•œ ν”„λ‘œκ·Έλž¨μ΄ μ™„μ„±λ©λ‹ˆλ‹€.

gets ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž μž…λ ₯을 λ°›λŠ” κ²½μš°μ—λŠ” μž…λ ₯의 길이λ₯Ό μ œν•œν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€. μž…λ ₯ 받을 λ²„νΌμ˜ 크기λ₯Ό λ„˜μ–΄μ„œλŠ” μž…λ ₯을 μ‹œλ„ν•˜λ©΄, 버퍼 μ˜€λ²„ν”Œλ‘œμš°μ™€ 같은 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄, μž…λ ₯을 받을 λ²„νΌμ˜ 크기보닀 μž‘μ€ 길이의 λ¬Έμžμ—΄λ§Œ μž…λ ₯받도둝 μ‘°μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” name λ°°μ—΄μ˜ 크기λ₯Ό 20으둜 μ„€μ •ν•˜μ—¬ μ΅œλŒ€ 20개의 문자λ₯Ό μž…λ ₯받을 수 μžˆλ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½ μ‚¬μš©μžκ°€ 20κ°œλ³΄λ‹€ κΈ΄ λ¬Έμžμ—΄μ„ μž…λ ₯ν•˜λ €κ³  μ‹œλ„ν•˜λ©΄, 쀑간뢀터 자λ₯΄κ²Œ λ©λ‹ˆλ‹€.

μ‹€μ œ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” λ‹€μ–‘ν•œ λ°©μ‹μœΌλ‘œ gets ν•¨μˆ˜λ₯Ό ν™œμš©ν•  수 있으며, 이λ₯Ό 톡해 효율적이고 νŽΈλ¦¬ν•œ μ‚¬μš©μž μž…λ ₯ 처리λ₯Ό κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ, 버퍼 μ˜€λ²„ν”Œλ‘œμš°μ™€ 같은 λ³΄μ•ˆ 문제λ₯Ό κ³ λ €ν•˜μ—¬ μž…λ ₯의 길이λ₯Ό μ œν•œν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œλŠ” μ‚¬μš©μžλ‘œλΆ€ν„° 이름을 μž…λ ₯λ°›λŠ” κ°„λ‹¨ν•œ 예제λ₯Ό μ†Œκ°œν•˜κ³  있으며, μ‹€μ œ ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” λ‹€μ–‘ν•œ 상황에 맞게 gets ν•¨μˆ˜λ₯Ό ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ¬Έμžμ—΄ 좜λ ₯ν•˜κΈ°: puts

C ν”„λ‘œκ·Έλž¨μ—μ„œ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” ν•¨μˆ˜μΈ puts에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” stdio.h 헀더 νŒŒμΌμ— μ •μ˜λ˜μ–΄ 있으며, μž…λ ₯된 λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•©λ‹ˆλ‹€. puts ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•œ λ’€ μžλ™μœΌλ‘œ μ€„λ°”κΏˆμ„ μ²˜λ¦¬ν•΄μ€λ‹ˆλ‹€.

λ‹€μŒμ€ puts ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” κ°„λ‹¨ν•œ μ˜ˆμ œμž…λ‹ˆλ‹€:

#include <stdio.h>

int main() {
    char greeting[] = "μ•ˆλ…•ν•˜μ„Έμš”, 세상!";

    puts(greeting);

    return 0;
}

μœ„ μ˜ˆμ œμ—μ„œλŠ” "μ•ˆλ…•ν•˜μ„Έμš”, 세상!"μ΄λΌλŠ” λ¬Έμžμ—΄μ„ μ €μž₯ν•œ λ°°μ—΄ greeting을 μ •μ˜ν•©λ‹ˆλ‹€.

puts(greeting);을 μ‚¬μš©ν•˜μ—¬ greeting 배열에 μ €μž₯된 λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•©λ‹ˆλ‹€. μ€„λ°”κΏˆ λ¬Έμžκ°€ μžλ™μœΌλ‘œ 처리되기 λ•Œλ¬Έμ—, 좜λ ₯ κ²°κ³Όμ—λŠ” λ‹€μŒ μ€„μ—μ„œ λ‹€μŒ 좜λ ₯이 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

μ΄λ ‡κ²Œν•˜λ©΄ "μ•ˆλ…•ν•˜μ„Έμš”, 세상!"μ΄λΌλŠ” λ¬Έμžμ—΄μ΄ 화면에 좜λ ₯λ©λ‹ˆλ‹€.

puts ν•¨μˆ˜λŠ” μ€„λ°”κΏˆμ΄ μžλ™μœΌλ‘œ 처리되기 λ•Œλ¬Έμ—, 좜λ ₯ 결과에 μ€„λ°”κΏˆμ΄ ν•„μš”ν•œ 경우 μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ, μ€„λ°”κΏˆμ΄ ν•„μš”ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” λ‹€λ₯Έ 좜λ ₯ ν•¨μˆ˜λ₯Ό μ„ νƒν•˜λŠ” 것이 더 μ μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹€μ œ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” λ‹€μ–‘ν•œ λ°©μ‹μœΌλ‘œ puts ν•¨μˆ˜λ₯Ό ν™œμš©ν•  수 있으며, 이λ₯Ό 톡해 효율적이고 νŽΈλ¦¬ν•œ λ¬Έμžμ—΄ 좜λ ₯을 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œλŠ” λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” κ°„λ‹¨ν•œ 예제λ₯Ό μ†Œκ°œν•˜κ³  있으며, μ‹€μ œ ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” λ‹€μ–‘ν•œ 상황에 맞게 puts ν•¨μˆ˜λ₯Ό ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€