上述警告是从这一行发出的:
fseek(fp, -sizeof(usr), SEEK_CUR);
Run Code Online (Sandbox Code Playgroud)
这fp是我的文件指针,usr也是我的结构。我正在执行上述操作以从文件更新结构。我尝试了各种方法,但无法删除警告:
更精确的警告:
warning: overflow in conversion from 'long long unsigned int' to 'long int' changes value from '18446744073709551304' to '-312' [-Woverflow]
fseek(fp, -sizeof(usr), SEEK_CUR);
Run Code Online (Sandbox Code Playgroud)
您收到此警告是因为sizeof(usr)has type size_t,它是您的目标系统(大概是 Windows)上的 64 位无符号类型,否定此无符号值312会产生一个巨大的值,18446744073709551304该值无法在没有损失的情况下转换为类型long,此超出范围的转换正在实现无论如何定义。您可以通过编写以下内容来解决此问题:
fseek(fp, -(long)sizeof(usr), SEEK_CUR);
Run Code Online (Sandbox Code Playgroud)
测试 的返回值fseek()将有助于发现潜在的问题。还要确保流以二进制模式打开。