gpt4 book ai didi

c++ - 在 C++ 代码中使用 fprintf

转载 作者:行者123 更新时间:2023-11-30 03:06:02 25 4
gpt4 key购买 nike

我有一个奇怪的问题。当我尝试编译下面的代码时,它没有像预期的那样失败:

#include <iostream>
#include <Windows.h>

int main(){
FILE *f = fopen("trystl.geo","w");
fprintf(f,"Merge \"trystl.stl\";");
fprintf(f,"\n");
fprintf(f,"Surface Loop(2) = {1};");
fprintf(f,"\n");
fprintf(f,"Volume(3) = {2};");
fclose(f);
return 0;
}

但是当我尝试将此程序连接到具有 FLTK 用户界面的按钮时,它会给我一个断言运行时错误。我的代码段:

void UserInterface::cb_m_BtnSTLToGEOConverter_i(Fl_Button*, void*){
//OnSTLToGEOConvert();
FILE *f = fopen("trystl.geo","w");
fprintf(f,"Merge \"trystl.stl\";");
fprintf(f,"\n");
fprintf(f,"Surface Loop(2) = {1};");
fprintf(f,"\n");
fprintf(f,"Volume(3) = {2};");
fclose(f);
}
void UserInterface::cb_m_BtnSTLToGEOConverter(Fl_Button* o, void* v){
((UserInterface*)(o->parent()->parent()->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_m_BtnSTLToGEOConverter_i(o,v);
}

当用户按下按钮时,我希望程序创建一个名为 trySTL.geo 的文件并执行显示的操作。但是当编译并打开程序并点击按钮时,它说:

Debug Assertion Failed!

Program: *.......\src\fprintf.c Line 55:

Expression: (str! NULL)

abort retry or ignore...

我使用的是 Visual Studio 2010。

最佳答案

错误很简单:VC++中fprintf.c的第55行是_VALIDATE_RETURN( (str != NULL), EINVAL, -1);strFILE* 参数(虽然我见过更好的命名变量)。

出于好奇(我是)_VALIDATE_RETURN 定义如下:

#define _VALIDATE_RETURN( expr, errorcode, retexpr )                           \
{ \
int _Expr_val=!!(expr); \
_ASSERT_EXPR( ( _Expr_val ), _CRT_WIDE(#expr) ); \
if ( !( _Expr_val ) ) \
{ \
errno = errorcode; \
_INVALID_PARAMETER(_CRT_WIDE(#expr) ); \
return ( retexpr ); \
} \
}

因此,在尝试写入不存在的文件描述符之前,最好检查一下您的 fopen() 调用是否成功。

关于c++ - 在 C++ 代码中使用 fprintf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7135390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com