当文件指针arg是stdout时,是否可以使用fseek?
我在尝试覆盖最后一个""的情况下尝试过它。在逗号分隔的列表中使用")"
e.g。
fprintf(stdout, "1,2,3,4,");
fseek(stdout, -1, SEEK_CUR);
fprintf(stdout, ")");
实现:
1,2,3,4)
而不是
1,2,3,4,)
不幸的是我输出了后者
答案 0 :(得分:5)
当且仅当 fseek
引用可搜索流时,您才能在stdout
上成功使用stdout
。
如果您的程序的标准输出要转到终端或类似的东西(通常是默认设置)或管道,那么fseek
将失败。如果由于您在重定向其输出的情况下执行了该程序而进入某个文件,则fseek
可以像处理任何其他文件一样工作。
每次调用fseek
时,都应检查其返回值,看是否成功或失败。
假设 stdout
可以寻找可能是不好的做法,因为它通常是一个不好的假设。
fseek
或打印'\b'
都不是您尝试做的好方法。如果您还没有打印列表中的最后一项,则应该打印逗号 ,而不是打印最后一个逗号然后尝试删除它。检测到这一点可能非常重要。
答案 1 :(得分:2)
无法在fseek
上使用stdout
。相反,您可以使用退格符'\b'
将光标移回一个空格:
fprintf(stdout, "1,2,3,4,");
fprintf(stdout, "\b)");
注意:如果stdout
指向终端,并且未已重定向到文件或管道,则此仅有效。此外,如果光标当前位于一行的开头,则不能保证其正常工作。一般情况下,只有少数几种情况可以使用。