Добрый день. Пытаюсь написать простую программу которая будет из исходного текста подставлять другие значения. Проблема в том, что программа заменяет значения только первых пяти элементов и то, если они написаны слитно без знаков препинания, добавление латинских букв к примеру вообще крашит программу. Я пробовал увеличить значение переменной которая отвечает за замену элементов, но проблема решается 50 на 50. Крашится так же. Только строка из слитных букв больше. Исходный код ниже. Так же выложу весь проект. Может так проще будет. https://yadi.sk/d/nGIOLDqB35vc7y
#include <Windows.h>
#include"resource.h"
HWND hEdit1;
HWND hEdit2;
const int m = 1000, n = 5;
CHAR str[m] = { 0 };
CHAR rezult[] = { 0 };
CHAR buttons[n] = { 'X','Y','A','B' };
BOOL CALLBACK DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), 0, (DlgProc), 0);
return 0;
}
BOOL CALLBACK DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg) {
case WM_INITDIALOG: {
hEdit1 = GetDlgItem(hwnd, IDC_EDIT1);
SetWindowText(hEdit1, str);
SetFocus(hEdit1);
hEdit2 = GetDlgItem(hwnd,IDC_EDIT2);
SetWindowText(hEdit2, rezult);
break;
}
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_BUTTON1:
GetWindowText(hEdit1, str, 255);
for (int i = 0; i<n; ++i)
if (str[i] > '0' && str[i] < m + '0')
{
str[i] = buttons[str[i] - '0' - 1];
}
SetWindowText(hEdit2, str);
break;
case IDOK:
MessageBox(hwnd, "OK", "Info", MB_OK || MB_ICONINFORMATION);
break;
case IDCANCEL:
EndDialog(hwnd, 0);
return FALSE;
}
break;
case WM_CLOSE:
EndDialog(hwnd, 0);
return FALSE;
}
return FALSE;
}
Данный цикл
for (int i = 0; i<n; ++i)
if (str[i] > '0' && str[i] < m + '0')
{
str[i] = buttons[str[i] - '0' - 1];
}
не имеет никакого смысла. Так как переменная m
имеет значение равное 1000
const int m = 1000, n = 5;
^^^^^^^^
то, фактически, данное условие
if (str[i] > '0' && str[i] < m + '0')
будет выполнено для любого значения str[i]
, большего '0'
. Однако корректный диапазон индексов для массив buttons
, объявленного как
CHAR buttons[n] = { 'X','Y','A','B' };
это всего лишь [0, 3]
. Таким образом для любого значения str[i]
, которое больше '4'
будет иметь место выход за пределы массива, что ведет к неопределенному поведению программы.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Вопрос далеко не новый, но толкового ответа, кроме как рекомендаций литературы я так и не нашелНачал изучать С++, так как после ВУЗа хотелось...
Суть следующая, нужно сделать БД учета звонков клиентов и учета заказовМанипулирования с БД будет происходить через PHP
Добрый день! Есть MySQL сервер, расположенный на хостингуК нему создается подключение из програмы написаной на Java + Hibernate
Ребят, нужно что бы объект передвигался и оставлял за собой след