c中fseek()的需要
第1部分:c中fseek()的需要,c,file-handling,fseek,C,File Handling,Fseek,第1部分: while(1) { ch=fgetc(pt); if(c==EOF) { break; } if(c==' ') { fputc('z',pt); } } 代码2的一部分:- while(1) { ch=fgetc(pt); if(c==EOF) { break;
while(1)
{
ch=fgetc(pt);
if(c==EOF)
{
break;
}
if(c==' ')
{
fputc('z',pt);
}
}
代码2的一部分:-
while(1)
{
ch=fgetc(pt);
if(c==EOF)
{
break;
}
if(c==' ')
{
fseek(pt,0,SEEK_CUR);
fputc('z',pt);
fseek(pt,0,SEEK_CUR);
}
}
我想替换文件中每个空格后的下一个字符。该文件由指针pt
指向
这两个代码都没有显示错误并且运行良好,但是当我从外部打开.txt
文件时,第一个代码没有执行任何操作,而第二个代码成功地替换了空格后的下一个字符
清楚地fseek(pt,0,SEEK\u CUR)代码>正在发挥作用
因此,我无法理解它在第二个代码中做了什么?这里使用fseek()
——C标准要求在更新流上的读操作和写操作之间,或者在写操作和读操作之间进行定位操作。这是写入和读取之间的定位操作。这不是一个禁止的行动;它将流置于一种模式,该模式允许下一个fgetc()
跨平台正确、可靠地工作,如C标准所要求
编辑:
2fseek()
调用是必需的,因为第一个调用充当fgetc()
和后续fputc()
调用之间的“无操作”调用。在fputc()
之后,第二个函数充当fputc()
和随后的fgetc()
调用之间的“no op”。(因为循环正在运行)您确定第二个代码中的是fputc('z',ft)而不是fputc('z',pt)?@AndyFaizan:哦,对不起……我的错误!!!!这就是pt
@kevingomes:这里使用fseek()——C标准要求在更新流上的读操作和写操作之间,或者在写操作和读操作之间进行定位操作。这是写入和读取之间的定位操作。这不是一个禁止的行动;它将流置于允许下一个fgetc()跨平台正确、可靠地工作的模式,正如C标准所要求的,从注释中可以看出——“它将流置于允许下一个fgetc()正确工作的模式”。否则它会像代码的第1部分那样出现故障。我想大概是it@AndyFaizan:您应该回答这个问题。那么为什么需要两个fseek()。请尝试删除后一个fseek(),然后检查,它没有任何作用