티스토리 뷰

아래와 같은 소스가 있다.

int  main(){
	char arr[5];
	scanf("%s", arr); 
	printf("%s   %d\n", arr, sizeof(arr));

	return 0;
} 


scanf()를 사용한 이 소스를 실행시켜 보면, '\0'을 제외하고 4자를 입력할 수 있다. 하지만, 사용자가 5자 이상을 입력했을 때, 프로그램이 크래시 되고만다.


반면, fgets()는 문자열의 최대 크기를 지정한다. 

int  main(){
	char arr[5];
	fgets(arr, sizeof(arr), stdin);
	printf("%s   %d\n", arr, sizeof(arr));

	return 0;
} 


그렇기 때문에 아무리 많은 글의 문자열을 입력하더라도 에러를 막을 수 있다.


이를 위해서 scanf()를 가지고, 문자열 제한을 두기 위해 포맷스트링에 길이를 명시하여 제한을 둘 수 있다.


이런 사용방법에 대한 차이 말고 어떤 차이가 있을까?

우선, scanf()는 여러 타입의 값을 입력할 수 있지만, fgets()는 문자열하나만 입력이 가능하다. 이런 면에서는 scanf()의 활용성이 더 클 수 있겠다. 하지만, fgets()의 특징으로는 scanf()의 경우 단순 사용할 경우, 공백이 들어가게 되면, 공백을 끝으로 인식하게 되고, 더 이상 문자를 쓰더라도 읽지 않는다. 반면, fgets()는 공백이 들어가는 것에 상관없이 사용자가 정해준 최대 문자열 길이보다 작거나 같다면, 모두 읽을 수 있다.

댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday