为什么ftell没有正确计算文件中的字母数?

时间:2013-08-24 05:38:51

标签: c fread fseek ftell

我想计算文件中的字母数。我已经尝试使用Windows和Linux测试编辑器编写文件,但两者都给出相同的值(7)。该文件有5个字符('P','2','\ n','#','\ n'),为什么ftell返回值7而不是5?

int main(void){
    unsigned char *px=NULL;
        int c=0,size_px;
    FILE *arq;
    arq = fopen("test.txt","rb"); 
        px = (unsigned char*) malloc(100*sizeof(unsigned char));
        fseek(arq,0,SEEK_END); // go to the end of file
        size_px = ftell(arq); //count the letters
        fseek(arq,0,SEEK_SET);  // return to the begin of file
        fread(px,sizeof(unsigned char),size_px,arq);
        printf("|%s| QTY:|%d|",px,size_px);
}

Ps:即使我从'rb'变为'r'模式,它仍继续给出answear 7,尽管在第二种模式(r)它会打印一些垃圾。该文件使用Notepad ++保存为test.txt。 那里有'\ n',这意味着我按了按钮Enter:

P2\n
#\n

1 个答案:

答案 0 :(得分:3)

  

软件应用程序和操作系统通常代表一个   带有一个或两个控制字符的换行符:

     

基于ASCII或兼容字符集的系统使用LF   (换行,'\ n',0x0A,十进制10)或CR(回车,'\ r',   单独为0x0D,十进制为13,或CR后跟LF(CR + LF,   '\ r \ n',0x0D0A)