Tag: ftell

ftell返回不正确的值

我有一个问题,其中ftell返回一个不正确的值。 我的代码,当在linux上的netbeans中运行时报告正确,但完全相同的代码,在Windows上运行netbeans(使用mingw)报告错误。 文件指针是在BINARY_READ中打开的文件。 在我的linux netbeans中,运行我的子程序之后,ftell报告35.在我的windows netbeans中,在调用相同的子程序之后,ftell是3621.我追踪了我的子程序,以下语句似乎导致问题: if (((header_size = getc (fp)) == EOF) || (header_size == 0)) 在我的linux netbeans上,这个语句之后的ftell(fp)导致1.但是在我的windows netbeans上,这个语句之后的ftell(fp)是3585。 可能导致问题的原因是什么?

FILE结尾*指针不等于写入数据的大小

非常简单地说,我有以下代码片段: FILE* test = fopen(“C:\\core.u”, “w”); printf(“Filepointer at: %d\n”, ftell(test)); fwrite(data, size, 1, test); printf(“Written: %d bytes.\n”, size); fseek(test, 0, SEEK_END); printf(“Filepointer is now at %d.\n”, ftell(test)); fclose(test); 它输出: Filepointer at: 0 Written: 73105 bytes. Filepointer is now at 74160. 这是为什么? 为什么写入的字节数与文件指针不匹配?

ftell(stdin)导致非法搜索错误

以下代码输出“非法搜索”: #include #include #include int main() { errno = 0; getchar(); getchar(); getchar(); ftell( stdin ); printf( “%s\n”, strerror(errno) ); } 当我运行“cat script | ./a.out”以及运行“./a.out”时,会发生这种情况。 问题在于ftell,当然。 我的问题是:为什么会发生这种情况? 我认为stdin可以寻找。 fseek也会导致同样的错误。 如果stdin不可寻找,有什么方法可以做同样的事情吗? 谢谢您的回复。

第一次调用fread后出现ftell错误

所以我有一个非常简单的程序,它读取文件的3个第一个字节: int main(void){FILE * fd = NULL; int i; unsigned char test = 0; fd = fopen(“test.bmp”,“r”); printf(“position:%ld \ n”,ftell(fd)); for(i = 0; i <3; i ++){fread(&test,sizeof(unsigned char),1,fd); printf(“position:%ld char:%X \ n”,ftell(fd),test); } return(0); } 当我用文本文件尝试它时它工作正常: 位置:0 位置:1个字符:61 位置:2个字符:62 位置:3个字符:63 但是当我用PNG运行时,我得到: 位置:0 职位:147字符:89 位置:148字符:50 位置:149字符:4E 请注意,文件的3个第一个字节确实是89 50 4E,但我不知道147来自哪里。 使用bmp文件,我得到: 位置:0 位置:-1字符:42 位置:0字符:4D 位置:1个字符:76 你知道这些第一个职位来自哪里吗? 非常感谢你的帮助

覆盖到c中的特定行

我有一个大约2000行文本的文件,我在我的程序中生成,每行都有一个员工的信息,它像这样输出 1 1 Isaac Fonseca 58 c 1600 1310.40 6 1 0.22 2164.80 1 2 1 Manuel Gutierrez 22 d 1700 1523.37 4 1 0.13 897.26 1 3 1 Daniel Bernal 34 c 1600 1195.84 2 1 0.26 836.16 1 4 1 Miguel Gonzalez 43 e 1800 1195.84 0 1 0.15 0.00 1 但我每当我编辑员工信息时我都要更新文件,我正在做的是我搜索该行并尝试重写它 我已经看到了有同样问题的人的以下问题,但是当我尝试写入文件时,它总是写入文件的末尾 […]

为什么fwrite的写作比我说的要多?

FILE *out=fopen64(“text.txt”,”w+”); unsigned int write; char *outbuf=new char[write]; //fill outbuf printf(“%i\n”,ftello64(out)); fwrite(outbuf,sizeof(char),write,out); printf(“%i\n”,write); printf(“%i\n”,ftello64(out)); 输出: 0 25755 25868 到底是怎么回事? write设置为25755,我告诉fwrite将多个字节写入文件,这是在开头,然后我在25755以外的位置?

ftello / fseeko vs fgetpos / fsetpos

ftello / fseeko和fgetpos / fsetpos有什么区别? 两者似乎都是文件指针获取/设置function,使用不透明偏移类型有时允许64位偏移。 它们是在不同平台上支持还是由不同标准支持? 它使用的偏移类型是否更灵活? 顺便说一句,我知道fgetpos / fsetpos和ftell / fseek ,但这不是重复的。 那个问题询问ftell / fseek,答案不适用于ftello / fseeko。

ftell在2GB以上的位置

在32位系统上,如果以二进制模式打开的文件的当前位置指示符超过2GB点, ftell返回什么? 在C99标准中,这是未定义的行为,因为ftell必须返回一个long int (最大值为2**31-1 )?