gpt4 book ai didi

c++ - 简单编辑对话框

转载 作者:行者123 更新时间:2023-11-30 04:34:27 24 4
gpt4 key购买 nike

我正在修改一个在 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;

代码编译得很好,但是当我运行程序时,文件名部分正常工作,但是一旦这个新位开始运行,程序就会崩溃。

我做错了什么?有没有更好的输入几个值的方法?

最佳答案

edit_dialog 函数的签名可能采用 char* 作为它的第四个参数。当您使用 tolerance 调用它时,您正在传递一个 int,因此您的代码将 int 的值(在本例中为 400)视为指针值 (0x400) 并查看字符串位于地址 0x400... Boom。崩溃。

在将整数值传递给 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);

关于c++ - 简单编辑对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6019174/

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