Не могу вывести переменную char
У меня есть кнопка, при нажатии на которую, слово должно шифроваться Цезарем и выводиться в textBox3, но слово нельзя вывести из-за "отсутствия операнда "+" ", но указатель выводится. В чём проблема?
private: System::Void button1_Click_2(System::Object^ sender, System::EventArgs^ e) {
char buffer[256]; int shift = Convert::ToDouble(textBox2->Text);
for (int i = 0; i < strlen(buffer); i++)
buffer[i] += shift;
textBox3->Text += "\r\n Слово: " + buffer;
}
Ответы (2 шт):
Автор решения: Антон
→ Ссылка
Нельзя складывать C-строки, нужно чтобы хотя бы одна была типа std::string
textBox3->Text += "\r\n Слово: " + std::string(buffer);
Автор решения: DmitryK
→ Ссылка
Что-то тут всё наперекосяк.
- У вас в буфере нет строки - какие именно данные вы сдвигаете?
- Почему конвертация в
double, а потом сразу приведение типа кint? strlen(buffer)работает, если там есть какие-то данные, ограниченные 0. Если в этом случайном наборе байтов нет 0, то это - выход за пределы массива.- в шифре Цезаря сдвиг циклический, а не просто увеличить всё на какое-то число, как в этом коде - вы получите абракадабру
- операции
+,+=есть у объектов типаstring. Создайте объектыstringиз строк -textBox3->Text += string("\r\n Слово: ") + string(buffer);
{
char buffer[256]; // создан пустой буфер - без данных
int shift = Convert::ToDouble(textBox2->Text); // конвертация в `double` и приведение типа к `int` по-умолчанию
for (int i = 0; i < strlen(buffer); i++) // в буфере неизвестные данные
buffer[i] += shift;
textBox3->Text += "\r\n Слово: " + buffer;
}