컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Friday, March 23, 2007

C언어] gets, fgets 함수로, 키보드 문자(문자열) 입력 받기; String Input


gets 는 입력받는 문자열 길이를 제한할 수 없어서 보안에 취약하므로.
fgets() 함수를 사용해야 합니다.

fgets() 는 텍스트 파일을 1행씩 읽을 때 사용하지만, 표준입력 쉽게 말해서 키보드 입력도 일종의 "가상 파일"이기에
stdin 이라는 이름을 지정하면, 키보드를 파일 삼아 읽을 수 있습니다.


사용자 문자열 입력 예제 소스


소스 파일명: example.cpp
#include <stdio.h>

int main(void) {

  // 끝의 "+ 1" 은 null 문자 1개의 길이
  // 실제는 총50바이트의 문자열
  char s[50 + 1];

  printf("아무 문자열이나 입력하세요: ");
  fgets(s, sizeof(s), stdin);
  printf("방금 입력받은 문자열: %s\n", s);


  return 0;
}



컴파일 및 실행 결과 화면:
D:\Z>cl /nologo example.cpp && example.exe
example.cpp
아무 문자열이나 입력하세요: eehwhwh
방금 입력받은 문자열: eehwhwh


D:\Z>cl /nologo example.cpp && example.exe
example.cpp
아무 문자열이나 입력하세요: egegeegegeegegeggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggg
방금 입력받은 문자열: egegeegegeegegeggggggggggggggggggggggggggggggggggg

D:\Z>






fgets 개행문자 없이


위의 소스의 경우에는 입력받은 문자열 끝에 개행문자가 붙어 있습니다.

이 소스는 그 개행문자를 지웁니다.

#include <stdio.h>
#include <string.h> // strlen()

int main(void) {

  // 끝의 개행문자 2개의 공간 포함
  // 실제는 총50바이트의 문자열
  char s[50 + 2];

  printf("아무 문자열이나 입력하세요: ");
  fgets(s, sizeof(s), stdin);

  // fgets 는 개행문자를 붙이기에
  // 개행문자를 제거해야 함
  s[strlen(s)-1] = '\0';

  printf("방금 입력받은 문자열: <%s>\n", s);


  return 0;
}





tag: cpp
C언어 | C/C++ (Visual C++)

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top