[네트워크프로그래밍] fgets()와 scanf() 차이점

2023. 3. 24. 14:40_Study/Network

728x90

#0324 #네트워크프로그래밍

해당 자료는 강의 학습 자료입니다.

🐇¸.•*¨*•¸.•*¨*•¸.•*¨*•¸.•*¨*•

문자열 입력 함수 fgets() scanf()의 차이점 : 저장되는 길이가 다르다.

 

fgets()

- 공백 입력을 허용, 마지막 Enter입력 : 줄바꿈 문자('\n') + 널문자('\0')가 추가

따라서 string -1 을 해야 정확한 값을 가져올 수 있다.

 

scanf()

- 공백을 기준으로 입력이 분리됨

마지막, Enter입력: 줄바꿈 문자를 문자열에 포함시키지 않고 NULL문자('\0')만 문자열에 추가

 

 

 

파일의 끝(EOF) 표시

파일의 끝 표시 : Linux 시스템에는 파일에 저장된 데이터를 가지고 파일의 끝을 검사하지 않는다.

 

File system 에는 해당 파일의 길이를 저장

- 파일 내부에는 파일의 끝(EOF) 표시를 위한 special character는 없다.

- EOF를 사용하는 이유? - 함수에서 보통 사용해서, EOF이라는 것은 없고 (-1)일 뿐이다.

 

파일의 끝 감지

- read() 함수 : return 0(NULL)

- fgetc(), getc(), getchar() : return -1(EOF)

 

썸네일은 따로 정보가 들어간다. 작은 사진으로 격자형태로 저장되는데, 원래 파일의 길이를 보고 파일의 끝을 감지하여 가져오는 반면, 이러한 어떤 특수한 파일은 표준 문서와 연결되는 경우도 있다.

 

 

파일에 데이터 쓰기 : 배열의 크기를 지정하지 않는 경우

char buf[] = "hello world!\n";

이처럼 사이즈를 저장하지 않으면? : 자동으로 널 값('\0')이 추가

 

 

 

문자열의 길이만큼 배열을 사용한다면? : 크기만큼 저장이 된다.

여기서 OxOa 는 LF(NL line feed, new line)

 

 

 

문자열 보다 큰 크기의 배열을 사용하는 경우? :  나머지 부분이 NULL로 채워지거나, 초기화를 안한 다면 쓰레기 값이 들어갈 수 있음.

 

 

 

 

sizeof(buf)가 아닌, strlen(buf)를 이용하여 파일에 저장하는 경우 : 문자열의 크기로 저장하는 경우

 

정리

저장하는 방식에 따라서 NULL값이 추가가 될 수도 있다. EOF라는 special character는 없다.

NULL도 없고 오직 파일의 길이를 저장하여 길이를 이용하여 데이터를 읽는다.

단지 사용하는 함수에 따라서 return 값이 달라질뿐이다.