차이점 Scanf와 fgets

Anonim

Scanf와 fgets

Scanf와 fgets는 C 프로그래밍에서 일반적으로 사용되는 두 개의 함수 구문이며 다른 프로그래밍 언어로 구현 된 시간이 있습니다. Scanf는 스캔 형식을 말합니다. Scanf는 유효한 토큰의 입력에 중점을두고 지정된 형식에 따라 구문 분석합니다. 프로세스의 전반적인 구현에 도움이되는 실행 및 코드의 차이점에 초점을두면 두 프로세스 간의 차이점을 파악할 수 있습니다. Fgets는 반면에, 다른 라이브러리에서 사용되기 시작한 C 라이브러리의 기능입니다.

fgets의 사용은 역 호환성을 허용하는 C89 및 C99 표준에 남겨져 있으므로 현대 프로그래밍에서는 권장하지 않습니다. 그렇더라도 전체 결과가 실행될 수있는 코드인지 확인하기 위해 fgets 사용을 잘 설명해야합니다. 따라서 fgets를 사용하는 프로그래머는 충분한 버퍼를 허용하는 데 필요한 문자 수의 최대 상한을 알아야합니다. 이는 데이터에 대한 사전 지식이 없기 때문에 어려운 과제입니다. 버퍼 오버 플로우가 발생할 경우 컴퓨터 보안을 활용할 수있는 게이트가 제공됩니다. 위의 이유로 mops 새로운 프로그램은 fgets를 사용하지 않는 것이 좋습니다.

scanf 함수는 일치하는 사용 가능한 모든 항목을 반환합니다. 요청한 것과 동일한 수의 항목을 얻을 수있는 것은 아니라는 점에 유의해야합니다. 항목은 요청한 것보다 적을 수 있습니다. 스트림이 고갈 된 경우 EOF 오류가 발생합니다. 이 동일한 시나리오는 항목 일치가 완료되기 전에 읽기가 실패 할 때도 나타납니다. 그런 다음 scanf 함수는 성공적으로 일치하는 항목의 총 수를 반환하며 그 중 요청 된 수보다 적을 수 있습니다.

fgets와 scanf 사이에는 또 다른 차이점이 있습니다. fgets가 열려 있으면 해당 파일에서 읽을 가능성을 포함합니다. Scanf는 파일이 아닌 표준 입력에서만 읽습니다. fgets는 파일에서 지정된 시간에 한 줄의 텍스트 만 읽는다는 것도 중요합니다. 반면에 Scanf는 한 번에 한 줄씩 텍스트를 읽을 수 있지만 문자열 형식에서 오는 숫자 형식으로의 변환도 처리 할 수 ​​있습니다. Fgets는 대부분 주어진 데이터 행을 읽는 데 사용되지만 scanf는 데이터 해부에 사용됩니다.

다른 점은 scanf가 범위 검사를 수행하지 않는 반면 fgets는 평가를 수행 할 수있는 더 나은 선택을 제공한다는 것입니다. 그런 다음 Scanf를 사용하여 경계가 fgets에 의해 검사 된 후이를 평가할 수 있습니다.

주목할만한 또 하나의 중요한 점은 scanf가 특정 입력에 대해 format 인수 내에 정의 된 특정 패턴을 찾는 것입니다.이 입력을 표준 입력이라고합니다. 이 경우 주어진 입력은 사용 된 변형에 따라 문자열 파일이 될 수 있습니다. 반면, Fgets는 특히 파일에서 한 줄을 읽어 버퍼의 출력으로 복사합니다. 일반적으로 scanf에는 기본 사용에서 읽을 수있는 특정 문자 수에 대한 제한이 없습니다. Fgets에는 읽을 수있는 최대 문자 수가 있습니다.

요약

Scanf는 스캔 형식을 말합니다.

Scanf는 유효한 토큰의 입력에 중점을 둡니다.

Scanf는 지정된 형식에 따라 입력을 구문 분석합니다.

Fgets는 C의 함수입니다.

Scanf는 표준 입력에서만 읽습니다.

Fgets는 파일에서 지정된 시간에 한 줄의 텍스트 만 읽습니다.

Scanf는 범위 검사를 수행하지 않습니다.