2012-09-04 134 views
1

我有两个.c文件:一个包含main,另一个包含我所有的函数。一次读取一个字符文件

在我主我有,我想在一个时间循环看起来像这样来读取一个字符的一部分:

while(ch = ReadFile(fp)) != EOF) 
{ 
    // Code 
} 

其中ch是一个整数(int ch;)和fp是一个文件指针(FILE* fp; )。

和(不同.c文件---):

int ReadFile(FILE* fp) 
{ 
    // Some code 
    return n; // The next char 
} 

有谁知道我可以从主一次读一个字符这样,使用这种方法吗?

+4

'INT N =龟etc(FP);'? –

+2

如果你希望你的代码是可移植的,我会避免使用名称ReadFile,因为Windows定义了[同名函数](http://msdn.microsoft.com/en-us/library/windows/ desktop/aa365467%28v = vs.85%29.aspx),并且C中不允许使用函数重载。 –

+1

如果不允许使用诸如getc()这样的函数,则需要在问题中提及(最好在标题中)。就像它读取一样,你根本不知道如何进行文件访问。我认为这是功课? –

回答

6

更新: -

<stdio.h>著名getc是一个解决方案: -

while((ch = getc(fp)) != EOF) 
    { 
     //... 
    } 
... 
int ReadFile(FILE* fp) 
{ 
    //Do what you wish... :) 
    return getc(fp); 
} 

声明为int getc(FILE * _File);

+0

谢谢!我同意getc,但我需要使用我自己的外部ReadFile函数。所以while循环必须保持不变。 – user1647010

+0

@ user1647010: - 完成... :) – perilbrain

0

简单:

while(ch != EOF) 
{ 
    ch = fgetc(fp); 
    //process ch 
} 

记住fgetc是decla红色作为int

或者,如果你想通过烧焦你可以通过字符读取文件字符建立一个串字符来动态分配的内存,像这样(假设fp为您开放,阅读):

char *data = NULL, *tmp; 
int ch, bff = 0; 

while(ch != EOF) 
{ 
    if(!(tmp = realloc(data, bff + 2))) 
    { 
     free(data); 
     return 1; 
    } 
    data = tmp; 
    ch = fgetc(fp); //or your readfile function assuming it works the same as fgetc 
    data[bff++] = ch; 
} 
data[bff] = '\0'; 

只是free(data)当你用它做

+0

每次迭代调用realloc听起来都很昂贵。 – Awn

0

试试这个:

int ReadFile(FILE* fp, int *buffer) 
{ 
    if(fp != NULL) 
    { 
     *buffer = fgetc(fp); 
     return *buffer; 
    } 
    else return NULL; 
} 
相关问题