在我的代码中,我试图完成这样的事情(用伪代码编写):
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但仍然使用我正在阅读的角色?
答案 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功能手册。