본문 바로가기
c언어/c언어

[c언어] '%s'와 '%[n]s'

by ilp 2024. 6. 8.
반응형

'%s'

  • 가장기본적인 문자열 포맷 지정자
  • 문자열출력하거나 입력받을 때 사용된다.

👇 출력 예

char str[] = "Hello, world!";
printf("%s\n", str);
  • Hello, world! 를 출력한다.

 

👇 입력 예

char str[100];
scanf("%s", str);
  • 사용자의 입력에서 첫 번째 공백이나, 개행 문자 전까지 문자열을 'str'에 저장한다.
  • 만약 사용자가 Hello world를 입력했다면,  'str'에는 Hello만 저장된다.

'%[n]s'

  • 'scanf' 함수에서 사용된다. / 입력 받은 문자의 수를 제한할 때 사용된다.
  • 'n'최대 문자 수를 지정하는 숫자이다.

👇 입력 예

char str[100];
scanf("%10s", str);
  • 최대 10개의 문자를 입력 받아 'str'에 저장한다.
  • 사용자가 'Hello world'를 입력하면 'Hello worl'까지만 저장되고 나머지는 무시된다.
  • 공백이나 개행문자를 만나도 'n'글자까지 모든 문자를 입력 받는다.

버퍼 오버플로우 주의

'%s'

  • '%s' 사용시 입력 버퍼의 크기를 넘어서는 입력이 들어오면 프로그램이 이상해 질 수 있다.
  • 가능하면 '%[n]s'를 사용하는 것이 안전하다.

'%[n]s'

  • 'n'은 배열의 크기보다 작거나 같아야 한다. 
  • 배열의 크기를 초과하는 'n'을 사용하면 역시 오버플로우가 발생할 수 있다.

반응형

'c언어 > c언어' 카테고리의 다른 글

[c언어] typedef  (0) 2025.03.02
[c언어] strcnpy  (0) 2025.03.02
[c언어] strcpy  (0) 2025.03.02
[c언어] 함수  (4) 2024.07.02
[c언어] strcmp  (2) 2024.05.31