C 为什么fgetpos()返回负偏移量?
当我使用C 为什么fgetpos()返回负偏移量?,c,C,当我使用fgetpos(fp,&pos)时,调用将pos设置为负值,其中pos类型为fpos\u t。有人能解释为什么会这样吗 #include<stdio.h> #include<string.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define MAX_TAG_LEN 50 char filename[1000] = "d:\\ire\\a.xml"; //extract eac
fgetpos(fp,&pos)
时,调用将pos
设置为负值,其中pos
类型为fpos\u t
。有人能解释为什么会这样吗
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define MAX_TAG_LEN 50
char filename[1000] = "d:\\ire\\a.xml";
//extract each tag from the xml file
int getTag(char * tag, FILE *fp)
{
//skip until a beginning of a next
while(!feof(fp))
if((char)fgetc(fp) == '<')break;
if(!feof(fp)){
char temp[MAX_TAG_LEN]={0};
char *ptr;
int len;
fpos_t b;
fgetpos(fp,&b); // here the b is containing -ve values.....???
fread(temp,sizeof(char),MAX_TAG_LEN - 1,fp);
temp[MAX_TAG_LEN-1] = 0;
ptr = strchr(temp,'>'); //search of ending tag bracket
len = ptr - temp + 1;
sprintf(tag,"<%.*s",len,temp); //copy the tag
printf("%s",tag); //print the tag
b += len; //reset the position of file pointer to just after the tag character.
fsetpos(fp,&b);
return TRUE;
}
else{
return FALSE;
}
}
int main()
{
int ch;
char tag[100]={0};
FILE *fp = fopen(filename,"r");
while(getTag(tag,fp)){
}
fclose(fp);
return 0;
}
#包括
#包括
#包括
#定义真1
#定义FALSE 0
#定义最大标签长度50
字符文件名[1000]=“d:\\ire\\a.xml”;
//从xml文件中提取每个标记
int getTag(char*tag,FILE*fp)
{
//跳到下一个开始
而(!feof(fp))
if((char)fgetc(fp)='';//搜索结束标记括号
len=ptr-温度+1;
sprintf(标签,根据:
fpos\u t
对象通常是通过调用fgetpos
创建的,该调用返回对该类型对象的引用。fpos\u t
的内容不是直接读取的,而是在调用fsetpos
时将其引用用作参数
我认为这意味着在理论上,只要实现正确处理,fpos\u t
的值可以是任意的正或负。例如,fpos\u t
可以是文件末尾的偏移量,而不是文件开头的偏移量,在这种情况下,负值是有意义的。它也可能是一些奇怪的位-压缩表示,将使用每个位(包括符号位)对有关文件位置的其他信息进行编码。最后我发现了错误
msdn说
您可以使用fseek重新定位
指针位于文件中的任意位置
指针也可以定位在
fseek文件的结尾将清除
文件结束指示符,并使
任何先前ungetc调用的影响
逆流而上
打开文件进行追加时
数据,当前文件位置为
由最后一次I/O操作确定,
不是在下一次写的地方
发生。如果尚未执行任何I/O操作
在为打开的文件上发生
追加时,文件位置为
文件的开头
对于以文本模式打开的流,fseek的使用有限,因为
回车符–换行符转换
可能导致fseek产生意外的
结果。唯一的fseek操作
保证在打开的流上工作
在文本模式下,有:
以0相对偏移量进行搜索
到任何原始值。正在查找
从具有
从对的调用返回的偏移量值
弗特尔
一旦fopen调用从“r”修改为“rb”,它就可以正常工作了
谢谢请将您使用的完整代码发布到fposRightfpos\u t
是一种不透明类型,就像文件
一样,您永远不应该尝试访问其内部,因为它们是实现定义的。+1
<file>
<page>
<title>AccessibleComputing</title>
<id>10</id>
<redirect />
<revision>
<id>133452289</id>
<timestamp>2007-05-25T17:12:12Z</timestamp>
<contributor>
<username>Gurch</username>
<id>241822</id>
</contributor>
<minor />
<comment>Revert edit(s) by [[Special:Contributions/Ngaiklin|Ngaiklin]] to last version by [[Special:Contributions/Rory096|Rory096]]</comment>
<text xml:space="preserve">#REDIRECT [[Computer accessibility]] {{R from CamelCase}}</text>
</revision>
</page>
</file>