반응형

문자열단위 입출력 함수

 

오타가 있군요.. gets함수와 fgets함수는 입력함수입니다.. 위에서는 출력함수라고 해놨군요 

정정하겠습니다. gets함수와 fgets 함수는 문자열 '입력' 함수입니다. 

 

일단 출력함수의 사용예를 보여드리겠습니다. 

 

 

같은 내용을 fputs함수와 puts함수를 이용해서 출력한 것입니다. 

 

출력결과입니다.

fputs 함수는 자동으로 줄을 바꾸지 않지만, 

puts 함수는 자동으로 줄을 바꿔주는 것을 볼 수 있습니다. 

 

문자열 입력함수 사용예를 보여드리기 전에, 문자열 입력함수는 2가지가 있지만, 

gets는 내포하고있는 오류가능성 때문에 거의 사용하지 않습니다. 

 

예를 들어보겠습니다. 

이런식으로 미리 크기 10짜리 배열 arr를 선언해놓고, 

6번째줄의 gets 함수를 이용하여 입력을 받는데.. 문제는 

배열 arr는 크기 10만큼밖에 지정을 안해놨기 때문에, 

실제로 입력을 받을때 이보다 더 큰 데이터가 입력이 되면, 

BOF(버퍼 오버플로우) 현상이 발생해, 프로그램에 치명적인 문제를 일으킬 수 있습니다. 

 

따라서 gets함수를 사용하지 않고 fgets 함수만 사용하겠습니다. 

사용예제입니다. 

8번째줄 fgets함수의 2번째 인자를 잘 보면 

sizeof()를 이용하여, str배열의 길이를 인자로 주었습니다. 

 

실행결과입니다.

 

 

만약 배열의 길이보다 긴 데이터가 입력되면 어떻게 될까요?? 다음 실행결과를 보시죠

 

잘 보시면 1부터 9까지, 9개의 문자가 입력되는것이 보일것입니다.

코드에서 배열의 길이는 10으로 지정 해 놨는데 왜 9개만 입력되냐구요?

C언어에서 문자열이 되기 위해서는 문자열 제일 마지막에 NULL 이 들어가기 때문에

배열길이 10중 1은 NULL문자가 들어가고 나머지 9에 데이터가 입력됩니다.

 

이상입니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기