2013-03-02 7 views
0

텍스트 파일을 읽고 txt 파일의 문자열 길이를 lenA에 지정하고 str1.fa를 10으로 설정하면 프로그램 출력 5가 6 문자로 표시됩니다. 3. 당신이 루프 반복에 두 번 fgetc를 호출하기 때문에텍스트 파일의 글자 수

#include <iostream.h> 
    #include <stdio.h> 
    using namespace std; 

    int main(){ 
int lenA = 0; 
FILE * fileA; 
char holder; 
    char *seqA=NULL; 
char *temp; 

//open first file 
fileA=fopen("d:\\str1.fa", "r"); 

//check to see if it opened okay 
if(fileA == NULL) { 
    perror ("Error opening 'str1.fa'\n"); 
    exit(EXIT_FAILURE); 
} 

//measure file1 length 
while(fgetc(fileA) != EOF) { 
    holder = fgetc(fileA); 
    lenA++; 
    temp=(char*)realloc(seqA,lenA*sizeof(char)); 
    if (temp!=NULL) { 
     seqA=temp; 
      seqA[lenA-1]=holder; 
    } 
    else { 
     free (seqA); 
     puts ("Error (re)allocating memory"); 
     exit (1); 
    } 
} 
cout<<"len a: "<<lenA<<endl; 
free(seqA); 
fclose(fileA); 

    system("pause"); 
return 0; 
} 
+3

저에게 C++처럼 보입니다. – cnicutar

+1

@cnicutar C ('free','realloc')를 사용하는 C++ 구문 ('namespace') ... –

+1

파일의 크기를 원한다면 그냥'stat'해야합니다. 추신 : 절대'시스템'호출을 사용하십시오! –

답변

2

당신은 다른 모든 문자를 폐기된다.

변경이이에

while(fgetc(fileA) != EOF) { 
    holder = fgetc(fileA); 

:

while((holder = fgetc(fileA)) != EOF) { 
+0

작동합니다. 감사합니다 .--) – mahdimb

1

그냥 파일을 열고 크기의 수. 메모리 할당 및 문자 읽기를 건너 뛰십시오 ...

FILE *f = fopen(fn, "r"); 
fseek(f, SEEK_END, 0); 
long int lenA = ftell(f); 
fclose(f);