如何设置变量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];
}
答案 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];
}