2011-10-25 5 views
3

fgetc를 사용하여 파일에서 문자열을 읽습니다. 문자열이 얼마나 오래 데이터를 보유해야하는 배열을위한 공간을 다시 할당해야하는지 알지 못합니다. 이를 위해 현재 배열이 꽉 찼을 때를 알아야합니다. 문자 배열을 읽은 후에 문자 배열이 null로 끝나는 지 확실하지 않습니다. 그래서 예를 들어 8 크기의 배열을 가지고 있고 fgetc는 제 9 번째 문자를 줄 것입니다. 배열의 크기가 현재 8 또는 9입니까? (8 문자 + \ 0 또는 8 문자 만). 테스트 할 수있는 방법이 있습니까? 그리고 \ 0이 없다면. 문자열을 읽었을 때 char 배열에 직접 추가해야합니까?String이 null로 끝나는 지 어떻게 알 수 있습니까?

+1

모든 표준 문자열 함수가 거기에있는 NULL 문자를 사용하므로 예를 추가하거나 이상한 문제에서 실행하게됩니다. – RageZ

답변

0

fgetc가 호출 당 하나의 문자를 읽고 문자열의 크기를 얻기 때문에 읽기 문자가 \ 0 또는 EOF에 도달했는지 확인해야합니다. \ 0 바이트가 표시되면 \ 0을 포함하여 모든 바이트를 복사해야합니다. \ 0없이 EOF에 도달하고 문자 카운터가> 0 인 경우 \ 0을 직접 추가해야합니다.

2

버퍼의 현재 크기와 문자를 추가하는 위치를 모두 추적해야합니다. 그 다음 위치가 버퍼 크기를 늘리는 데 필요한 크기와 같은지 확인하십시오. 종료 문자 인 \0 문자를 수용하려면 실제 크기는 +1이어야하며 마지막 문자를 읽은 후에 항상 추가해야합니다.

1

fgetc를 사용하면 바이트 단위로 문자열을 보유하는 메모리를 구축하므로 종료 문자 '\ 0'의 추가 바이트가 필요하므로 메모리 할당이 총 문자열 길이 +1이되어야합니다.

"string"과 함께 작동하는 함수는 실제로 '\ 0'으로 끝나는 바이트 콜렉션을보고 있습니다. 그래서 예를 들어 "Hello World"는 'H' 'e' 'l' '' '' '' ''o ''r '' ''d ''0 '으로 메모리에 저장됩니다. 함수가 문자열 처리를 중단해야하는 시점을 알 수 있습니다.

관련 문제