나는 이상한 일이 일어나고 있으며 왜 그런 일이 일어나는지 잘 모르겠습니다. 기본적으로 fgetc를 사용하여 바이트 단위로 간단한 ASCII 파일의 내용을 가져와야합니다. 이상한 부분은 작동했지만 몇 가지 문자를 추가하고 갑자기 파일에없는 줄 바꿈을 추가하고 파일의 끝 부분을 읽습니다. 말 그대로 내가 한 모든 난 그냥 각 문자 밖으로C - fgetc를 사용하여 파일 끝을 읽는 중
temp_size = strlen(temp)-1;
for(debug_k = 0; debug_k < temp_size; debug_k++){
printf("%c", temp[debug_k]);
}
인쇄 확인 후
do {
temp = (char*) checked_realloc (temp, n+1);
e = fgetc(get_next_byte_argument);
temp[n] = e;
if (e != EOF)
n++;
}
while (e != EOF);
그리고이었다 그리고 파일에 없었다 여분의 줄 바꿈을 추가 한 것을 제외하고는 제대로 모든 것을 출력합니다. 그 전에 나는 가지고 있었다
그러나 그 다음 그것은 알려지지 않은 약간의 바이트로 끝났다. 경우에 대비해 strlen (temp) -2를 시도했지만 특정 파일에 대해 작동했지만 끝에 "a"를 추가하면 다시 파손되었습니다.
저는 솔직히 엉망입니다. 왜 이렇게하는지 잘 모르겠습니다.
EDIT : checked_realloc은 단지 realloc이지만 빠른 검사를 통해 메모리가 부족하지는 않은지 확인합니다. 이 방법이 가장 효율적인 방법은 아니라는 것을 알지만, 왜 내가 여분의 바이트로 마술처럼 읽는 것 같아 걱정하고 있습니다.
'strlen (temp)'가 작동하려면 파일 내용 다음에 종료 NUL 문자가 있어야합니다. 이 마지막 '\ 0'을 추가하는 코드를 표시하지 않았습니다. –
checked_realloc()이 realloc 일 경우 읽기 전에 메모리를 0으로 초기화하십시오. –
Oooooh ... 이런. 나는 그것에 대해 완전히 잊었다. 감사! 그건 그렇고,이 마지막 문자는 EOF이므로 NULL을 대체하거나 아니면 그냥 뒤따라야합니까? 시행 착오를 통해 알아낼 수는 있지만, – user1777900