티스토리 뷰
아래와 같은 소스가 있다.
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()는 공백이 들어가는 것에 상관없이 사용자가 정해준 최대 문자열 길이보다 작거나 같다면, 모두 읽을 수 있다.
'Language > C' 카테고리의 다른 글
[C언어] 함수 포인터 (0) | 2013.10.02 |
---|---|
[C언어] 포인터와 const (0) | 2013.10.01 |
[C언어] 문자열 포인터 (0) | 2013.10.01 |
[C언어] 배열이 0부터 시작하는 이유 (0) | 2013.10.01 |
[C언어] int main()과 void main(), float main().... 의 차이 (0) | 2013.10.01 |
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
- Total
- Today
- Yesterday