亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

現在遇到的問題就是ftell怎么讀文件長度都是-1,后續就不知道怎么辦了。

現在遇到的問題就是ftell怎么讀文件長度都是-1,后續就不知道怎么辦了。

C PHP
至尊寶的傳說 2023-03-04 18:14:31
#include <stdio.h>int countKeyChar(char *buffer, char keyChar){int i;int cnt = 0;for(i=0; buffer[i] != '\0'; i++){if(buffer[i] = keyChar){cnt++;}}return cnt;}FILE *openFile(char *fileName, char *openMethod){FILE *fp;if(fp = fopen(fileName, openMethod) == NULL){printf("Cannot open file!\n");exit(0);}return fp;}void closeFile(FILE *fp){if(fp == NULL){printf("No file!\n");exit(0);}fclose(fp);}int getFileLength(FILE *fp){int len;fseek(fp, 0, SEEK_END); //將文件指針移到文件末尾len = ftell(fp);printf("%d.......",len);return len;}char *readData(FILE *fp, int n){int i;char *buffer;buffer = (char *)malloc(sizeof(char) * n + 1);for(i=0; i<n; i++){buffer[i] = fgetc(fp);}buffer[n] = '\0';return buffer;}int main(){FILE *fp; //文件指針char keyChar; //存放關鍵字符char *buffer; //指向存放文件數據的緩沖區char fileName[50]; //存放文件名int fileLen; //存放文件大小int cnt; //存放文件中關鍵字符的出現次數printf("Input file name: ");scanf("%s", fileName);getchar(); //消除上一行輸入末尾的回車printf("Input key character: ");scanf("%c", &keyChar);fp = openFile(fileName, "r");fileLen = getFileLength(fp); //計算文件字節數(即共有多少個字符)buffer = readData(fp, fileLen);  cnt = countKeyChar(buffer, keyChar);  printf("The number of \'%c\': %d\n", keyChar, cnt);free(buffer); //釋放緩沖區closeFile(fp);return 0;}
查看完整描述

2 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

Otherwise, -1 is returned and errno is set to indicate the error.

粗略看了一下,在你openFile函數實現里面有一句:
if(fp = fopen(fileName, openMethod) == NULL)
我記得 == 的優先級是比 = 要高的,右邊先判斷后不管是1還是0,對于fp來說都是個無用值,所以你在下面緊接著調用getFileLength(fp),ftell會報錯返回-1.

查看完整回答
反對 回復 2023-03-08
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

#include <stdio.h>#include <stdlib.h>                   //最好加上這個頭文件,里面有malloc和free函數int countKeyChar(char *buffer, char keyChar){    int i;    int cnt = 0;    for(i=0; buffer[i] != '\0'; i++)    {        if(buffer[i] = keyChar)        {            cnt++;        }    }    return cnt;} FILE *openFile(char *fileName, char *openMethod){    FILE *fp;    if((fp = fopen(fileName, openMethod)) == NULL)   //這邊,用括號將fp = fopen括起來    {        printf("Cannot open file!\n");        return 0;    }    return fp;} void closeFile(FILE *fp){    if(fp == NULL)    {        printf("No file!\n");        return;    }    fclose(fp);} int getFileLength(FILE *fp){    int len;    fseek(fp, 0, SEEK_END);      len = ftell(fp);    printf("%d.......",len);    return len;} char *readData(FILE *fp, int n){    int i;    char *buffer;    buffer = (char *)malloc(sizeof(char) * n + 1);    for(i=0; i<n; i++)    {        buffer[i] = fgetc(fp);    }    buffer[n] = '\0';    return buffer;}int main(){    FILE *fp;      char keyChar;     char *buffer;      char fileName[50];    int fileLen;     int cnt;         printf("Input file name: ");    scanf("%s", fileName);    getchar();      printf("Input key character: ");    scanf("%c", &keyChar);    fp = openFile(fileName, "r");    fileLen = getFileLength(fp);     buffer = readData(fp, fileLen);      cnt = countKeyChar(buffer, keyChar);      printf("The number of \'%c\': %d\n", keyChar, cnt);    free(buffer);      closeFile(fp);    system("pause");    return 0;}

你再試試,程序本身沒什么問題,修改后的代碼在vs2005中,可以獲取文件大小


查看完整回答
反對 回復 2023-03-08
  • 2 回答
  • 0 關注
  • 81 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號