파일입출력에서..중간라인삭제.

ttarot의 이미지


파일에... 이런식으로 저장되있다고 할때..
aaa A+
bbb B+
ccc C+

bbb 를 입력 받으면 그 라인을 제거.
aaa A+
ccc C+
로 파일내용을 바꾸는 겁니다.. 아래 코드가 짠거구요.
돌아가긴 하는데.....

맨아래 ccc 를 입력 받아서 제거하면
aaa A+
bbb B+
로 정상적으로 남는데.. 만약 bbb나 aaa를 입력받으면
(aaa라고 하면..)
bbb B+
ccc C+
ccc C+
이런식으로 하나 더 붙어서 나오는데 왜그런걸까요.

void three(){
    FILE *fd,*fd1;
    char name[80];
    char line[80];
    char temp[1024];
 
    fd=fopen("temp","rb");
    scanf("%s",&name);
    fflush(stdin);
 
    while(!feof(fd)){
        fgets(line,80,fd);
        if(strstr(line,name)==NULL){
            strcat(temp,line);
        }
    }
    fclose(fd);
 
    fd=fopen("temp","wb");
    fprintf(fd,"%s",temp);
    fclose(fd);
 
    printf("삭제되었습니다.\n");
}
익명 사용자의 이미지

fileno() : FILE * 에서 fd를 추출( FILE * 타입에서 때때로, int형의 file descriptor를 추출할때 사용됨)
ftell() : 파일의 크기 리턴(예를들어 최종적으로 출력한 파일의 위치 리턴)
ftruncate() : 파일의 길이 제한(예를들어, 300바이트 길이를 200바이트로 자르기, 뒷부분은 제거함)

이 세 개의 함수를 적절히 하여, 예를 들어 300바이트 였던 파일을 200바이트로 바꾸는 방법을 고민해 보세요. 그리고, 응용해보세요.

bushi의 이미지

while() {} 하기 전에
temp[0] = 0;

fgets() 하기 전에
memset(&line[0], 0, sizeof(0);

OTL