Диалоговое окно простого редактирования - PullRequest
1 голос
/ 16 мая 2011

Я изменяю программу, работающую в 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;

Код компилируется просто отлично, но когда я запускаю программу, секция имени файла работает так же, как и должна, ноСбой программы, как только начинает работать этот новый бит.

Что я делаю не так?Есть ли лучший способ ввода пары значений?

1 Ответ

2 голосов
/ 16 мая 2011

Сигнатура для функции edit_dialog, вероятно, принимает символ * в качестве 4-го параметра. Вы передаете туда int, когда вызываете его с tolerance, поэтому ваш код обрабатывает значение 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...