C++ OBJ 解析器 - 第一次机会异常
Posted
技术标签:
【中文标题】C++ OBJ 解析器 - 第一次机会异常【英文标题】:C++ OBJ Parser - First Chance Exception 【发布时间】:2014-06-25 22:11:44 【问题描述】:我正在尝试创建一个 C++ 程序,该程序将解析 .obj 文件并在 OpenGL 中呈现 .obj 文件中定义的模型。到目前为止,所有这些代码都应该做的是打开一个 .obj 文件并将每个顶点放入一个向量中(.obj 文件中的顶点定义在以“v”开头的行中)。
我的完整代码是:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
struct vec3
float x;
float y;
float z;
;
void loadOBJ(const char * Path)
vector<vec3> Vertices;
FILE * OBJFile;
vec3 temp = vec3();
fopen_s(&OBJFile, Path, "r");
char lineHeader[128];
//set to true when there are no more lines in the OBJ file
bool ended = false;
while(!ended)
fscanf_s(OBJFile, "%s", lineHeader);
if(strcmp(lineHeader,"v") == 0)
fscanf_s(OBJFile, "%f %f %f\n", &temp.x, &temp.y, &temp.z);
printf("Point: %f %f %f\n", temp.x, temp.y, temp.z);
Vertices.push_back(temp);
else if(lineHeader != NULL)
fscanf_s(OBJFile, "\n");
else
ended = true;
int main()
loadOBJ("example.obj");
cin.get();
return 0;
线路出现问题
fscanf_s(OBJFile, "%s", lineHeader);
如果我将此行注释掉,我将不会获得第一次机会异常。如果我使用字符而不是字符串,我也不会得到第一次机会异常。
【问题讨论】:
在调试器中获得第一次机会异常本身并没有错。也就是说,_s
函数 require you to pass the size of the buffer,所以... fscanf_s(OBJFile, "%s", lineHeader, sizeof(lineHeader)/sizeof(char));
'如果我使用字符而不是字符串' 你到底是什么意思? Can you elaborate this in your question please?您的意思是在尝试将 fscanf_s()
应用于 std::string
或简单的单个 char
变量参数时失败?
【参考方案1】:
我强烈建议使用 freed 并且永远不要使用 fsanf 及其变体。
【讨论】:
以上是关于C++ OBJ 解析器 - 第一次机会异常的主要内容,如果未能解决你的问题,请参考以下文章