将std :: vector <char>复制到动态char数组中会添加意外字符

时间:2015-11-12 18:52:53

标签: c++ vector

我正在将函数转换(是正确的动词吗?)char []转换为std :: vector,反之亦然。 t_main中的代码是我正在运行的测试,以查看函数是否正常工作。

typedef std::vector<char> string_t;

static string_t CharArrayToVector(const char string[])
{
    string_t vectorString;
    for (int i = 0; string[i] != NULL; ++i)
        vectorString.push_back(string[i]);
    return vectorString;
}

static char* VectorToCharArray(string_t string)
{
    char *new_string = new char[string.size()];
    for (int i = 0; i < string.size(); i++)
        new_string[i] = string.at(i);
    return new_string;
}

主要功能:

int _tmain(int argc, _TCHAR* argv[])
{
    cout << VectorToCharArray(CharArrayToVector("hello world!1"));
    int x;
    cin >> x;
    return 0;
}

以下代码打印“hello world!1”,然后打印一堆字符。

每次运行时字符都相同(4个下标2s,8 1/2标志,然后是三组不透明矩形,然后是欧元符号,最后是另一个矩形),即使我改变了我正在打印的内容,也保持不变。调试显示在初始化数组时添加了额外的字符(char * new_string = new char [string.size()];)

是什么导致这些额外的角色,我该如何解决?感谢。

1 个答案:

答案 0 :(得分:5)

您需要在'\0'附加char *个字符。另外,不要忘记为额外的角色分配足够的空间。

但你为什么要这样做?此功能已内置于std :: string。