텍스트 파일에서 알 수없는 길이의 문자열을 읽는 방법에 대한 질문이 있습니다. 프로그램이 '\ n'을 가로 질러 인쇄 될 때 인쇄합니다. 파일에 더 이상 읽을 문자열이 없다는 것을 알게되면 프로그램은 종료되어야합니다.텍스트 파일에서 길이를 알 수없는 문자열 읽기
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEFLEN 2
#define CHUNKSZ 2
char *getStrFromFile(FILE *fpin);
int main(void)
{
FILE *fpin;
fpin = fopen("test.txt","r");
int d = 0;
while(1)
{
char *ln;
ln = getStrFromFile(fpin);
if (!ln)
break;
++d;
printf("line %d : %s\n", d, ln);
free(ln);
}
fclose(fpin);
return(0);
}
char *getStrFromFile(FILE *fpin)
{
int i = 0;
char *line;
line = (char*)malloc(DEFLEN);
fgets(line,strlen(line),fpin);
if(line[strlen(line-1)] == '\n')
return line;
char *temp;
temp = line;
char *read;
read = (char*)malloc(CHUNKSZ);
fgets(read,strlen(read),fpin);
line = (char*)malloc(strlen(temp)+strlen(read));
for(i; i<strlen(temp);i++);
line[i]=temp[i];
for(i;i<strlen(read);i++);
line[i+strlen(temp)] = temp[i];
free(read);
free(temp);
return line;
}
문제는 내가이 프로그램을 실행할 때 (I 메인에있는 동안 (1) 의심) 무한 루프를 실행하는 것입니다,하지만 텍스트 파일에 문자열을 출력 표시되지 않습니다 . 가 인쇄 무엇
은 다음과 같습니다
line 1 :
line 2 :
line 3 :
... 등등 영원히 보인다까지.
내가 예를 들어, 인쇄 할 필요
: 4 개 라인 텍스트 파일을 읽는 프로그램의line 1 : 0
line 2 :
line 3 :
line 4 : 567890
예.
솔직히 말해서 나는 갇혀 있고 어떤 일이 잘못되었는지 알지 못합니다. 내가 뭔가를 인쇄 할이라도 있지만 ASCII 문자의 라인을 따라 뭔가이었다 한 코드 줄에서 오류를 가리 키도록 것 같습니다 177 177 + 177 177
:
line = (char*)malloc(strlen(temp)+strlen(read));
내가 생각할 수있는 것은 내 복귀 선이다. 부정확하다? 나는 여기에서 길을 잃는다.
'strlen'은 문자열, 즉 널 종료 문자 배열에서만 사용할 수 있습니다. 당신의 코드에서'strlen'을 사용하는 대부분은 잘못된 것입니다. –
char에 캐스팅 된 코드가 포함되어 있습니까? – jdanzi
@YuHao가 제안했듯이,'strlen'의 사용법은 약간의 경우에 잘못되었습니다. 예를 들어,'fgets'는 버퍼 크기를 필요로합니다. malloc이 메모리를 할당하고 첫 번째 바이트가 널 종결자인 경우 'strlen'은 0을 반환합니다. malloc에 전달한 내용은 fgets로 전달해야합니다. 또한 문자 색인으로'i + strlen (temp)'를 사용하기 때문에 마지막'for' 루프에서'i'를 0으로 초기화해야합니다. –