#include<stdio.h>
void main()
{
FILE *fp,*fp1;
char c;
fp=fopen("test.txt","r");
fp1=fopen("test1.txt","w");
c=getc(fp);
while(c!=EOF)
{
if (c=="")
{
c=getc(fp);
continue;
}
else
fprintf(fp1,"%s",c);
c=getc(fp);
}
fclose(fp);
fclose(fp1);
}
답변
문자는 문자열이 아니기 때문에.
fputc를 사용해보십시오.
BTW : c는 int 여야합니다. 그렇지 않으면 EOF를 감지 할 수 없습니다. EOF> 255.
Nitpick : EOF는 보통 0보다 작습니다 (그러나 반드시 그럴 필요는 없습니다). –
c==""
도 생각대로 작동하지 않습니다.
문제는 변수 c의 fprintf ("% s")입니다. c는 문자열이 아니며 단일 문자입니다. 그 라인을
fprintf(fp1,"%c",c);
으로 바꾸십시오. 그러면 문제가 해결됩니다. 실제로 한 파일의 내용을 다른 파일로 복사하는 더 좋은 방법이 있습니다.
더 좋은 방법은 무엇입니까? – Hick
가장 좋은 방법은 "cp"입니다. 그러나 나는 이것이 운동이라는 것을 모았습니다. 또는 복사하는 동안 내용을 필터링하는 것과 같이 좀 더 흥미로운 것을하려고합니다. 위의 접근법에서 가장 큰 문제점은 한 번에 한 캐릭터를 읽는 것이 매우 느립니다. 최소한 블록 크기가 약 16k 인 read()/write() 또는 fread()/fwrite() 등을 통해 한 번에 청크 파일을 읽고 쓰고 싶습니다. – Nelson
예. 나는 모든 흰 공백을 제거하고 있습니다. 렉서를 개발 중입니다. 지금은 그 방법으로는 작동하지 않습니다. – Hick
문제를 일으킬 수있는 코드에는 여러 가지 문제가 있습니다.
fp
및 fp1
은 파일 열기 실패를 확인 fopen
결과가 할당 된 후 NULL
에 대해 확인한다.
c
유형은 을 올바른 문자 읽기와 올바르게 구별 할 수 있도록 int
이어야합니다.
c == ""
리터럴 길이가 0 인 문자열의 주소와 문자 값을 비교하려고 시도합니다.
fprintf(fp1,"%s",c)
은 문자 값 c를 상수 문자열의 주소로 해석하고이 주소를 따라 문자열을 인쇄하려고 시도합니다. 세그멘테이션 오류가 발생할 가능성이 가장 높은 오류입니다.
덜 중요한 스타일 문제.
main
의 반환 값은 int
이어야합니다. void main(void)
이 많은 구현을 허용하더라도 이식 가능합니다. 당신의 if
조항의 몸으로
는 루프가 끝까지 실행하고 continue
다음 경우 아마이 절을 제거하고 문 경우 것과 반대와 함께를 적용 명확하게 될 것이다, 무슨 일이 일어날 지와 일치 c==""
은 현재 else
성명이되어야한다고 생각합니다.
코드가 잘못된 메모리 액세스로 인해 세그먼트 화 오류를 발생시키는 경우 fprintf는 종료 문자를 찾아이 프로세스에서 잘못된 메모리 위치에 액세스합니다.
또한 파일 포인터는 널 (null)을 검사해야하며, 그 중 하나라도 null 인 경우 코드가 정상적으로 종료되어야합니다. 그렇지 않으면 segfault가 발생합니다.
- 1. 이 코드로 세분화 오류가 발생하는 이유는 무엇입니까?
- 2. 세그먼트 오류가 발생하는 이유는 무엇입니까?
- 3. 이 코드로 인해 스택 오버플로가 발생하는 이유는 무엇입니까?
- 4. 이 경우 세그먼트 화 오류가 발생하는 이유는 무엇입니까?
- 5. 이 오류가 발생하는 이유는 무엇입니까?
- 6. 이 코드로 인해 양식이 사라지는 이유는 무엇입니까?
- 7. 배열 초기화 코드로 인해 StackOverflowException이 발생하는 이유는 무엇입니까?
- 8. WCF 클라이언트 -이 오류가 발생하는 이유는 무엇입니까?
- 9. 이 인수 오류가 발생하는 이유는 무엇입니까?
- 10. 이 코드에서 오류가 발생하는 이유는 무엇입니까?
- 11. 이 코드로 인해 파일 잠금 오류가 발생합니다.
- 12. 경고/오류가 발생하는 이유는 무엇입니까?
- 13. CGColor를 분해하는이 코드 조각으로 인해 버스 오류가 발생하는 이유는 무엇입니까?
- 14. 다음 코드로 인해 가비지 또는 액세스 위반 오류가 발생하는 이유는 무엇입니까?
- 15. 변수 선언으로 인해 세그먼트 화 오류가 발생합니다.
- 16. 이 코드로 인해 HTML 선택 상자가 작동하지 않는 이유는 무엇입니까?
- 17. 이 코드로 인해 Excel이 제대로 닫히지 않는 이유는 무엇입니까?
- 18. 이 플러드 채우기 알고리즘으로 인해 스택 오버플로가 발생하는 이유는 무엇입니까?
- 19. 링커 오류가 발생하는 이유는 무엇입니까?
- 20. 세분화 오류가 발생하는 이유는 무엇입니까?
- 21. 이 C++ 코드 스 니펫 세그먼트 화 오류가 발생하는 이유는 무엇입니까?
- 22. 이 이벤트가 발생하는 이유는 무엇입니까?
- 23. RoR 앱에서이 오류가 발생하는 이유는 무엇입니까?
- 24. 파이썬에서 세그먼트 오류가 발생하는 벡터 2 곱셈
- 25. 이 오류가 발생하는 이유는 무엇입니까? java.sql.SQLException : 준비된 문을 다시 준비해야합니까?
- 26. 이 코드로 인해 "500"내부 서버 오류가 발생할 수 있습니까?
- 27. UIWebView 링크 클릭 오류가 발생하는 이유는 무엇입니까?
- 28. jQuery/JavaScript 함수에서이 오류가 발생하는 이유는 무엇입니까?
- 29. 내 콘텐츠 URI가 오류가 발생하는 이유는 무엇입니까?
- 30. 콘솔에서 ImageIO 오류가 발생하는 이유는 무엇입니까?
특정 질문에 대한 답변을 이미 갖고 있지만 일반적으로 디버거가 있습니까? 이는 특정 세분화 오류의 최소한 즉각적인 원인을 찾는 가장 좋은 방법입니다. – quark
'fp'와'fp1'보다는'file1'과'file2'와 같은 좋은 변수 이름을 사용해야합니다. – GManNickG