1. 연습문제1
프롬프트($) : 사용자가 입력하길 대기하는 기호를 보통 프롬프트라고 부름
#include ...
#define BUFFER_SIZE 20
int main(void)
{
char buffer[BUFFER_SIZE];
while(1){
printf("$");
fgets(buffer, BUFFER_SIZE, stdin);
// 크기를 매개로 받기 떄문에, 그 사이즈의 크기 만큼에 대해서 제약을 받는다. 따라서 메모리 엑세스 위반이 일어나지 않기 때문에 scanf,gets보다 안전하다
// 즐비꿈이 일어나는 이유 : 줄바꿈 문자까지 이 버퍼에 저장해주기 떄문에 이런 문제가 발생한다. 그런데 gets_s는 new line character를 포함하지 않는다.
// 우리가 원하는 대로 하려면
buffer[strlen(buffer)-1]='\0';
//긴 문장을 입력하고 엔터를 하면 다시 문제가 발생. fgets는 우리가 제공하는 BUFFER_SIZE 만큼의 길이만을 제공
printf("%s:%d\n", buffer ,strlen(buffer));
}
}
함수를 정의하여 만들기
#include ...
int read_line(char str[], int n);
#define BUFFER_SIZE 20
int main(void)
{
char buffer[BUFFER_SIZE];
while(1){
printf("$");
int len = read_line(buffer, BUFFER_SIZE);
printf("%s:%d\n", buffer ,len);
}
return 0;
}
int read_line(char str[], int limit) {
int ch, i = 0;
while ((ch = getchar()) != '\n')
if (i<limit)
str[i++] = ch;
str[i] = '\0';
return i;
}
참고자료