与fgetc()和ungetc()相关的C语法

时间:2015-09-11 20:49:35

标签: c

在我的代码中,我试图完成这样的事情(用伪代码编写):

While not at EOF:
    Get line
    Write line to different file
    Skip 30 bytes

目前,我能想到的最佳方式是这样的:

int c;
while((c = fgetc(stream)) != EOF){
     ungetc(c,stream);
     REST OF CODE

有没有更好的方法来检查我是否在EOF但仍然使用我正在阅读的角色?

2 个答案:

答案 0 :(得分:1)

您可能希望在循环条件之外调用mysql_real_escape_string()

md5($pwd);

答案 1 :(得分:1)

您可以像这样使用fgetc

while ((c = fgetc(fp)) != EOF) {
    ...
}

,因为您想阅读(如您的伪代码所示),您可以使用fgets

char *fgets(char *s, int size, FILE *stream);

你会用它作为:

char *buffer = malloc(500);

while (fgets(buffer,500, fp)) {
    // treat line here
}

从手册:

  

fgets()从流中读取最多一个小于大小的字符          并将它们存储到s指向的缓冲区中。阅读停止后          EOF或换行符。如果读取换行符,则将其存储到          缓冲。终止空字节('\ 0')存储在最后一个之后          缓冲区中的字符。

返回

  

fgets()成功时返回 s ,错误时或文件结束时返回NULL          在没有读取任何字符时发生。

这意味着fgets函数的返回可以用作while循环的条件(因此您不需要执行!= EOF)。

<小时/> 编辑(奖金):至于skip 30 bytes的伪代码,您可能需要查看fseek功能手册。