#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.
當年話下
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中,可以獲取文件大小
- 2 回答
- 0 關注
- 87 瀏覽
添加回答
舉報
0/150
提交
取消
