动态增加和减少char数组?

时间:2014-03-10 00:08:00

标签: c++ arrays string char

我必须用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来自莫斯科!

1 个答案:

答案 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>