파일입출력 도와주십쇼 미치겠네요

글쓴이: 익명 사용자 / 작성시간: 목, 2016/11/17 - 11:21오후
void update() { FILE *fp; int fd; int flags = O_WRONLY | O_CREAT; mode_t mode = 0644; char buf[1024]; char *line = NULL; fp=open("./memo.txt","r"); size_t len =0; ssize_t read; char name; printf("수정할할 값을 입력하세요 : "); scanf("%s", &name); printf("수정할 이름 : "); scanf("%s", &card.name); printf("수정할 회사 : "); scanf("%s", &card.company); printf("수정할 연락처 : "); scanf("%s", &card.tel); printf("\n\n"); sprintf(buf, "%s\t%s\t\t%s\n", card.name, card.company, card.tel); fd = open("temp_memo.txt", flags, mode); while((read=getline(&line,&len,fp)) != -1) { if(strchr(line,name)) { write(fd, buf, strlen(buf)); continue; }else{ write(fd,line,strlen(line)); } } free(line); remove("memo.txt"); rename("temp_memo.txt","memo.txt"); remove("temp_memo.txt"); return; }
결과를 보자면
예를 들어
kim sa 101
lee lg 202
park hp 303
이렇게 저장되어 있으면
처음에 lee를 수정하면
kim sa 101
변경된 값 (아주 잘뜸)
park hp 303
이렇게 잘 뜹니다.
근데 여기서 한번더 lee를 변경 시켜주면(이름 : lee 회사 : aa 번호 : aa)
lee aa aa
lee aa aa
lee aa aa
입력받은 값으로 모조리 바뀝니다..
왜이러는 걸까요?
웃긴게
kim sa 101
lee aa aa <--- lee를 변경(lee , aa ,aa) 아주 잘뜸
park hp 303
여기서 park을 변경하면 또 park도 잘 변경되어서 나옵니다.
근데 문제점이
lee나 park이나 kim이나
한번 수정할땐 이상 없는데, 두번 수정하면
최근 수정하려는 입력값으로 모조리 다 바뀐다는겁니다 ㅠㅠ
왜그런지 미치겠습니다.
Forums:
char name;
여기까지 읽고 스크롤 쭉 내렸습니다.
왜 이렇게 짜면 안 되는지 직접 생각해보세요.
아 그건 제가 실수했네요!
아 그건 제가 실수했네요!
오랜만에 C를 하는거라 기본적인 문법이 기억나질 않습니다ㅠ..
근데 그걸 고쳐도 문제는 똑같네요..
문제가 몇 개나 될런지는 모르겠습니다만 제가 다
문제가 몇 개나 될런지는 모르겠습니다만 제가 다 찾아서 고쳐 드리기는 좀 그렇군요.
한 가지 더. 함수에서 파일을 두 개 열고 있는데, 저라면 그 파일을 지우거나 옮기기 전에 먼저 닫을 겁니다. 안 그러면 온갖 비직관적인 일이 일어날 수 있거든요. 특히 buffered I/O라면 더더욱.
댓글 달기