2012-08-09 5 views
-5

실행할 때 항상 argv [1] 파일에있는 내용의 시작 부분에 공백이 있습니다. 왜 그래야만하지 ?C - 파일 처리 및 EOF

또한 EOF를 입력하는 방법은 무엇입니까? 누를 때마다

control + D, 

다른 입력으로 받아들입니다. "#"을 EOF로 정의했지만 파일의 내용 끝에옵니다. 또한 내가

control + Z 

을 누른 다음 TextMate를 함께 열려고하면이 (가 2,825메가바이트을 보였다 일단!) 파일 크기가 큰 말한다

+1

코드가 깨졌습니다 (초기화되지 않은 문자열 포인터를 사용 중입니다). 사용중인 실제 코드는 무엇입니까? – trojanfoe

+0

'feof (file)'을 시도 했습니까? – Geoffrey

+0

@trojanfoe : str이 초기화되지 않았습니다. 실제 코드는 argv [1]이 NULL인지 여부를 확인합니다. 나머지는 여기에 주어진 것과 동일합니다. –

답변

3

당신은 내용이 초기화되지 않은 포인터가 가리키는 쓰고있다.

char *str; 

    while(strcmp(str, EOF)) 
     fputs(str, file); 

초기화되지 않은 포인터의 내용이 공백을 가리킬 수 있습니다. 그것을 액세스하는 정의되지 않은 동작이므로 관찰 한 동작은 가능한 결과 영역 내에 있습니다.

정말하고 싶은 것이 명확하지 않습니다.

입력을 프로그램에 입력하려고 시도하면 프로그램에서 입력을 읽을 수 없으므로 프로그램에서 EOF를 감지하지 못합니다.

입력을 읽으려는 경우 그렇게하는 기능을 사용해야합니다. 하나의 가능성은 fgets입니다. 태그의

char str[256]; 

while (fgets(str, sizeof(str), stdin) != 0) 
    fputs(str, file); 

하나는 osx, 그래서 "제어 D"는 명령 줄에서 사용하고자하는 것입니다.

+1

그건 답이 아닙니다. – trojanfoe

+0

@ 트로이안 호 : 더 좋습니까? – jxh

+1

아닙니다. 이 단계에서는이 질문에 대한 답이 없습니다. OP는 아직 그가 사용하고있는 실제 코드를 게시하지 않았습니다. – trojanfoe