如何设置变量的char数组的元素数量

时间:2016-03-15 08:45:43

标签: c++ arrays winapi char

如何设置变量char数组的元素数量?

这是我的代码:

long int len = strlen(qq);
//char buff[10];
//sprintf(buff, "%d", len);
//MessageBoxA(0,buff,0,0);


char key[len] = "12345678901234567890123456789..";//error
char crypt[len];//error


for (int i = 0; i < len; i++) {
     crypt[i] = text[i] ^ key[i];
}

2 个答案:

答案 0 :(得分:0)

在C ++中,数组只能使用编译时已知的常量变量进行静态大小,而len则不然。请注意,某些编译器扩展允许这样做,因为它允许在C中使用。但对于纯C ++,您可以使用动态内存分配(这在堆而不是堆栈上分配):

char* key = new char[len];
char* crypt = new char[len];

请注意,char*可以与char[]一样使用(您仍然可以使用数组索引,其余代码保持不变)。

由于数组现在已在堆上分配,为避免内存泄漏,您必须使用delete手动释放内存,例如:循环后在函数结束时:

delete[] key;
delete[] crypt;

答案 1 :(得分:0)

由于您指定了winapi标记,因此CString类可能是一个可行的解决方案。

但是对于key,您甚至不需要动态分配数组。您可以使用modulo运算符:

static const char key[] = "1234567890";
const size_t keyLength = strlen(key);

CString crypt(0, len);

for (int i = 0; i < len; i++) {
  crypt[i] = text[i] ^ key[i & keyLength];
}