如何在c++中导出.stl
how to export .stl in c++
I字符串将网格(柔体)导出为.stl格式。我使用了以下代码。请帮帮我,我对这些东西还不熟悉。
const CHAR* fileName = "D:\ImagesSCREENE.stl" ;
FILE* file = fopen(fileName,"rb");
unsigned char *buffer=0;
unsigned char *temp=0;
buffer[0]= (const char)"#vertices:n #indicesn";
for(int i = 1 ; i < softWorld->getSoftBodyArray().size(); i++)
{
buffer=(unsigned char*)softWorld->getSoftBodyArray()[i];
}
fwrite(buffer, sizeof(unsigned char), softWorld->getSoftBodyArray().size(), file);
fclose(file);
有一些问题,都与指针有关,这会导致未定义的行为。
让我们从这个开始:
buffer[0]= (const char)"#vertices:n #indicesn";
在这里,您获取一个指向字符串文字的指针,并告诉编译器将该指针视为单个字符,并将其分配给buffer[0]
,此时它是一个空指针。取消引用空指针会导致未定义的行为,很可能是崩溃的原因。
但这并不是你所做的唯一坏事。让我们看看这个:
buffer=(unsigned char*)softWorld->getSoftBodyArray()[i];
根据您的代码判断,softWorld->getSoftBodyArray()
可能返回std::array
或std::vector
对象。这意味着您从这个数组或向量中获取一个元素,并将其强制转换为指针,然后将其存储在buffer
中。再次出现未定义行为的情况,因为单个字符(我认为)不是指向某个事物的指针。你也可以在一个循环中这样做,每次迭代都会失去之前的赋值。虽然这不会导致崩溃,但你可以进行
fwrite(buffer, sizeof(unsigned char), softWorld->getSoftBodyArray().size(), file);
这里buffer
不是一个有效的指针。取消引用此无效指针再次是未定义的行为,可能导致崩溃。
您的代码中还有其他一些让人怀疑的地方,比如为什么要使用旧的C文件输入/输出函数而不是C++流?
你也可以以二进制模式打开这个文件,这表明你向文件中写入了二进制数据,但你似乎也想写一些文本(我只是猜测,我对文件格式一无所知)。
最后,您想写入该文件,但您以只读模式打开了它。
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 在C应用程序中运行C++(带有STL)函数
- 使用2个键的cpp-stl::优先级队列排序不正确
- 在STL容器中使用模板类
- 用C++中的CPerson(类)类型的对象初始化STL矢量
- 将stl字符串缩小到小于15个字符的容量
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 检查函数返回类型是否与STL容器类型值相同
- STL算法函数在多个一维容器上的使用
- 在STL - C++中按成绩对学生列表进行排序?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- λ可以适应STL吗?
- 为什么使用 NDK 不能存在不同的 stl 实现?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 在C++中迭代 STL 集时出现奇怪的问题<CStudent>
- 如何在 C++17 STL 并行算法中处理调度?
- 在学习数据结构之前对STL有一个了解是好的吗?
- C++ STL 排序会检查 NaN 吗?