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;
}
이번 문제를 통해서 scanf 함수로 문자열의 사이즈를 제한하여 입력 받을 수 있다는 것을 알게되었습니다.
scanf함수로 문자열 사이즈를 제한하여 사용하게 되면 10개 문자씩 출력할 수 있고 문자를 10개씩 받아들이면 되니까 제 코드처럼 char str[102]처럼 메모리를 낭비할 필요도 없게 됩니다.
scanf는 문자열 입력 사이즈의 제한을 두지 않기 때문에 오버플로우를 범할 위험이 있다. 이때 폭을 지정해주면 오버플로우를 방지할 수 있다.
char str[10]; scanf("%9s", str); // 널문자를 위해서 9개까지