在程序的这一部分,我想读取一个文本文件,并将txt文件中的字符串长度输入lenA,但是当str1.fa包含10时,程序输出5,显示为3的6个字符。
#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;
}
答案 0 :(得分:2)
您正在丢弃所有其他角色,因为您在每次循环迭代时调用fgetc
两次。
改变这个:
while(fgetc(fileA) != EOF) {
holder = fgetc(fileA);
到此:
while((holder = fgetc(fileA)) != EOF) {
答案 1 :(得分:1)
只需打开文件即可获得它的大小。跳过任何内存分配和字符读取......
FILE *f = fopen(fn, "r");
fseek(f, SEEK_END, 0);
long int lenA = ftell(f);
fclose(f);