C로 돌아가서 파일에서 읽을 때 오류가 발생했습니다. 아래의 코드 단어는 내가 읽는 파일이 1 라인보다 길 때 좋지만 텍스트의 한 라인이 '> ??' 문자. 내가 여기서 뭘 잘못하고 있을지 궁금해.C 파일 읽기가 예기치 않은 오류가 발생했습니다.
필자는 code.txt와 해당 출력의 text.txt를 포함 시켰습니다.
사전에 도움을 청합니다.
text.txt 는
이 [H는 [2Jbash가-3.2 $ ./a.out
헬로이 문장 이다
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main(int argc, char * argv[]) {
FILE * fp;
char * buff;
int i = 0;
fp = fopen("text.txt", "a+");
if(fp == NULL)
{
perror("exiting\n");
exit(EXIT_FAILURE);
}
fseek(fp, 0, SEEK_END);
long size = ftell(fp);
fseek(fp, 0, SEEK_SET);
//The file read keeps adding ?? to the 2nd line of the file. I've tried the two pieces of code below
//buff = malloc(size);
buff = (char*) malloc(sizeof(char)*size);
fread(buff, 1, size, fp);
printf("%s\n\n", buff);
fclose(fp);
return 0;
}
출력 샘플 "안녕하세요 이것은 문장" v> ä
bash-3.2 $ q [Kexit 출구
꼬리말 '\ 0'char를 수용하기 위해 buff의 크기를 1 바이트 늘려야 할 수 있습니다. 나는 fread가 거기에 놓을 지 모르겠다. 따라서 모든 버프 바이트를 0으로 설정하여 모든 기회를 배제하십시오. – lowtech
@lowtech :'fread'는 C- 문자열이 아닌 이진 데이터를 읽을 수 있기 때문에 후행하는 0을 추가하지 않습니다. 자동으로 0 바이트를 추가하면 재앙이 될 수 있습니다! – usr2564301
왜 "fread"를 사용하여 "텍스트 줄 읽기"를 사용하고 있습니까? 'fread'는 행복하게 end-of-line 문자를 포함합니다. 'fgets'를 사용하여 * lines *을 읽으십시오. 보너스로, 읽는 문자열을 0으로 끝낼 것입니다. – usr2564301