我有以下方法:
17 //returns size in bytes of binary file stream
18 //leaves the file at original position
19 long getFileSize(FILE * fp)
20 {
21 long pos = -1;
22 fpos_t *curPos;
23 if(fgetpos(fp, curPos) == 0)
24 {
25 fseek(fp, 0L, SEEK_END);
26 pos = ftell(fp);
27 fsetpos(fp, curPos);
28 }
29
30 return pos;
31 }
Run Code Online (Sandbox Code Playgroud)
这将编译和工作,但编译器会给我一个警告,因为curPos不是一个初始化变量.
如果我将该行更改为(编译器推荐)
22 fpos_t *curPos = NULL;
Run Code Online (Sandbox Code Playgroud)
我收到一个段错误.
为什么会这样?
你没有分配curPos.所以要么在堆上分配它(并确保以后释放它!)
fpos_t *curPos = malloc(sizeof(fpos_t));
Run Code Online (Sandbox Code Playgroud)
或者在堆栈上
fpos_t curPos;
Run Code Online (Sandbox Code Playgroud)
如果您在堆栈上分配它,您需要将引用传递给fgetpos:
fgetpos(fp, &curPos)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |