Майк хорошо ответил на этот вопрос. Вы не можете изменять константы строковых литералов. Время DOS почти закончилось. Надлежащий современный компилятор C ++ производственного уровня должен выдать предупреждение с соответствующими флагами. Просто, чтобы добавить немного к ответу Майка, вот хорошее объяснение константных строковых литералов - http://msdn.microsoft.com/en-us/library/69ze775t(v=vs.80).aspx
Кроме того, вот лучший способ сделать это:
#include <iostream>
void crypt(char* pData, unsigned int lenData, const char* pKey, unsigned int lenKey)
{
for (unsigned int i = 0; i < lenData; ++i)
pData[i] ^= pKey[i % lenKey];
}
int main()
{
char data[] = "any binary string here";
const char key[] = "key";
crypt (data, sizeof(data) - 1, key, sizeof (key) - 1);
std::cout << data << std::endl;
}
Примечание оператор постинкремента, ^=
и операторы sizeof. Для простых типов компилятор сделает эту микрооптимизацию за вас, но разработка хорошей привычки - это хорошо. Если у вас есть сложный итератор, использование постинкремента может нанести вред критическим путям производительности. Кроме того, жесткий размер строк подвержен ошибкам. Позже вы или кто-то другой можете изменить строку и забыть изменить ее длину. Не говоря уже о том, что каждый раз вам нужно идти и считать количество символов.
Удачного кодирования!