Menu
CoddyTech

scanf를 이용한 문자열 입력

Coddy C 여정의 논리 & 흐름 섹션에 포함된 레슨. 63개 중 14번째.

문자열이 널 종료 문자와 함께 작동하는 방식을 이해했으니, 이제 사용자로부터 문자열 입력을 받는 방법을 배울 차례입니다. scanf 함수는 %s 형식 지정자를 사용해 문자열을 읽을 수 있지만, 알아 두어야 할 중요한 제한 사항이 있습니다.

scanf로 문자열을 읽으려면 %s 서식을 사용하고 문자 배열의 이름을 전달합니다(& 연산자는 사용하지 않습니다. 배열 이름은 이미 주소이기 때문입니다).

char word[50];
printf("Enter a word: ");
scanf("%s", word);
printf("You entered: %s\n", word);

하지만 scanf("%s", ...)에는 치명적인 한계가 있습니다. 공백 문자(스페이스, 탭 또는 줄 바꿈)를 만나면 읽기를 멈춥니다. 즉, 사용자가 "Hello World"를 입력하면 scanf는 "Hello"만 가져오고 "World"는 입력 버퍼에 남깁니다.

또 다른 심각한 문제는 scanf가 입력값이 배열에 들어가는지 확인하지 않는다는 점입니다. 배열이 담을 수 있는 것보다 긴 단어를 입력하면 버퍼 오버플로가 발생하여 프로그램이 충돌하거나 보안 취약점이 생길 수 있습니다. 예상되는 입력을 담을 수 있을 만큼 문자 배열을 항상 충분히 크게 만드세요.

이러한 제한에도 불구하고 scanf("%s", ...)는 단일 단어를 읽는 데 아주 적합하며, 바로 이 내용을 다음 챌린지에서 연습하게 됩니다.

challenge icon

챌린지

쉬움

scanf를 사용해 사용자로부터 문자열 입력을 받고 다시 출력하는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다.

  1. 사용자의 입력을 저장할 30개의 요소를 가진 username이라는 문자 배열을 선언합니다.
  2. 다른 입력을 저장할 25개의 요소를 가진 hobby라는 문자 배열을 선언합니다.
  3. printf를 사용해 Enter your username: 메시지로 사용자에게 입력을 요청합니다.
  4. %s 형식 지정자를 사용해 scanf로 사용자 이름을 읽고 username 배열에 저장합니다.
  5. printf를 사용해 Enter your hobby: 메시지로 사용자에게 입력을 요청합니다.
  6. %s 형식 지정자를 사용해 scanf로 취미를 읽고 hobby 배열에 저장합니다.
  7. printf를 사용해 아래에 표시된 정확한 형식으로 두 문자열을 모두 출력합니다.

입력은 각각 공백이 없는 단일 단어 두 개로 제공됩니다.

출력은 다음 형식으로 표시되어야 합니다.

Enter your username:
Enter your hobby:
Hello [username], your hobby is [hobby]!

예를 들어, 사용자가 사용자 이름으로 Alice를 입력하고 취미로 reading을 입력하면 출력은 다음과 같아야 합니다.

Enter your username:
Enter your hobby:
Hello Alice, your hobby is reading!

이 과제에서는 %s 형식 지정자와 함께 scanf를 사용해 문자열 입력을 읽는 방법, 충분한 크기를 지정해 문자 배열을 올바르게 선언하는 방법, 그리고 printf를 사용해 사용자 입력을 형식에 맞춰 출력하는 방법에 대한 이해도를 확인합니다.

직접 해보기

#include <stdio.h>

int main() {
    // TODO: 여기에 문자 배열을 선언하세요
    
    // TODO: 여기에 입력을 요청하고 읽는 코드를 작성하세요
    
    // TODO: 최종 출력 메시지를 출력하세요
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리 & 흐름의 모든 레슨

직접 연습해 보세요: 온라인 C 컴파일러