我必须用UDP发送数据。缓冲区字段的类型为char。我还必须加密/解密我发送的内容。这是我的加密/解密代码。
const unsigned BUFFER_SIZE = 128;
char data[BUFFER_SIZE];
cout << "Enter something." << endl;
cin.getline(data, BUFFER_SIZE);
cout << data;
char outchar[BUFFER_SIZE];
for(int i = 0; i < strlen(data); i++)
{
//outchar[i] = data[i];
outchar[i] = encr[(int)data[i]];
cout << outchar[i];
}
cout << "Correct so far" << endl;
char transchar[BUFFER_SIZE];
for(int j = 0; j < strlen(outchar); j++)
{
transchar[j] = decr[(int)outchar[j]];
cout << transchar[j]; // prints out decrypted text and unused space!
}
这里的问题是使用固定大小的char意味着缓冲区中有大量未使用的空间。在提供的代码中,它会打印到屏幕上。
是否有动态增加和减少缓冲区(字符数组)的大小,以便我不会获得未使用的空间?
编辑:我认为不清楚的事情:每个字母都必须加密和解密!这些字词没有加密,构成它们的字母是!到目前为止给出的建议会将单词翻译成数组。我需要角色。
EDIT2:已删除。
编辑3:俄罗斯人,你必须爱他们。非常感谢Vlad来自莫斯科!答案 0 :(得分:3)
唯一的方法是动态分配所需大小的内存。而不是手动执行此操作,您可以使用标准类std::string
要将存储的数据作为char数组传递,您可以使用成员函数c_str()
或data()
例如
std::string data;
std::cout << "Enter something." << std::endl;
std::getline( std::cin, data );
std::cout << data;
std::string outchar;
outchar.reserve( data.size() );
for(int i = 0; i < data.size(); i++)
{
//outchar[i] = data[i];
outchar.push_back( encr[ (int)data[i] ] );
std::cout << outchar.back();
}
要使用std::string
,您需要添加标题<string>