我正在修改一个在Windows中运行的程序,我希望在启动时输入几个值。
在AppMain的开头,以下预先存在的代码允许用户输入文件名:
char our_file_name[260] = "TEST";
#ifdef WIN32
edit_dialog(NULL,"Create File", "Enter file name:", our_file_name,260);
#endif
这一切似乎都很简单,所以我想我只是为我的(带符号)整数值重新创建这个值,并使用下面的代码紧接着上面的代码插入:
#ifdef WIN32
edit_dialog(NULL,"Custom tolerance", "Enter tolerance:", tolerance,260);
#endif
#ifdef WIN32
edit_dialog(NULL,"Custom position", "Enter intended position:", position,260);
#endif
...以下放置其他变量声明:
int tolerance = 400;
int position = 0;
代码编译得很好,但是当我运行程序时,文件名部分就像应该的那样工作,但是一旦这个新位开始运行,程序就会崩溃。
我做错了什么?有没有更好的方法来输入几个值?
答案 0 :(得分:2)
edit_dialog
函数的签名可能需要char *作为第4个参数。当您使用tolerance
调用它时,您正在传递一个int,因此您的代码将int的值(在本例中为400)视为指针值(0x400)并且将查看位于地址0x400 ......轰隆隆。崩溃。
在将整数值传递给edit_dialog
函数之前,需要将整数值写入字符缓冲区。
char buf[256];
sprintf( buf, "%d", tolerance);
#ifdef WIN32
edit_dialog(NULL,"Custom tolerance", "Enter tolerance:", buf, 260);
#endif
(我打赌edit_dialog是一个宏,因为我很确定大多数编译器会在编译时捕获这个错误并警告你。)
然后当您的编辑对话框返回时,它会将用户输入的字符存储回buf,您可能希望将其转换为int。
tolerance = atoi(buf);