c로 배우는 자료구조 - 연습문제

1. 연습문제1

2018-01-25 8 22 27

프롬프트($) : 사용자가 입력하길 대기하는 기호를 보통 프롬프트라고 부름

#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;
    
}

2018-01-25 9 58 27


참고자료

동영상 주소

0%