백준 11721 문제

김준현·2021년 2월 19일
0

실수 기록 BaekJoon

목록 보기
2/4

C프로그램으로 알고리즘을 공부하고 있는 학생입니다. (Github)
이번 문제는 간단한 입출력 문제입니다.

이 문제를 해결하기 위해서 저는 입력을 string으로 받아 저장한 후, 한글자씩 출력하다가 10의 배수번째에서 '\n'을 출력하도록 코드를 짜봤습니다.

#include <stdio.h>
#include <string.h>

#define MAX_STR     101

int main(void) {
    char str[MAX_STR];
    const int print_size = 10;
    int length, i;
    
    scanf("%s", str);
    length = strlen(str);

    for(i = 0; i < length; i++) {
        printf("%c", str[i]);
        if((i+1) % print_size == 0)
            putchar('\n');
    }
    putchar('\n');

    return 0;
}

문제 해결 후 다른 분들의 소스코드를 보니 더 간단하며 메모리도 아낄 수 있는 방법이 있었습니다.

#include <stdio.h>

int main(void) {

    char inStr[11];
    
    while (scanf("%10s", inStr) > 0){
        printf("%s\n",inStr);
    }
	return 0;
}

Check

  1. scanf("%10s", inStr)와 같이 %s 사이에 정수를 넣음으로써 string의 문자입력개수를 제한할 수 있다.

이번 문제를 통해서 scanf 함수로 문자열의 사이즈를 제한하여 입력 받을 수 있다는 것을 알게되었습니다.

scanf함수로 문자열 사이즈를 제한하여 사용하게 되면 10개 문자씩 출력할 수 있고 문자를 10개씩 받아들이면 되니까 제 코드처럼 char str[102]처럼 메모리를 낭비할 필요도 없게 됩니다.


문법 정리

scanf는 문자열 입력 사이즈의 제한을 두지 않기 때문에 오버플로우를 범할 위험이 있다. 이때 폭을 지정해주면 오버플로우를 방지할 수 있다.

char str[10];
scanf("%9s", str);	// 널문자를 위해서 9개까지
profile
Handong University student.

0개의 댓글