自定义字符串类的奇怪输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义字符串类的奇怪输出相关的知识,希望对你有一定的参考价值。

我正在尝试在C ++中创建一个自定义字符串类。但是,当我尝试输出字符串的值时,会得到该值+一堆垃圾。

Class:

unsigned str_len;
char* str_val; // Both set as private in the header file

str::string::string(const char* value) {
    if (value) {
        unsigned n = 0;
        while (value[n] != '')
            n++;

        str_val = new char[n];
        str_len = n;

        for (unsigned i = 0; i < n; i++)
            str_val[i] = value[i]; 
    }
    else {
        str_val = new char[0];
        str_len = 0;
    }
}

unsigned str::string::len() { return str_len; }

char* str::string::val() {
    char* value = new char[str_len];

    for (unsigned i = 0; i < str_len; i++)
        value[i] = str_val[i];

    return value;
}

主文件:

int main() {
    str::string test("test");
    std::cout << "String length: " << test.len() << std::endl;
    std::cout << "String value: " << test.val() << std::endl;
}

预期输出:

String length: 4
String value: test

实际输出:

String length: 4
String value: test²²²²¼s╜ù÷f
答案

您在新字符串的末尾缺少' 0'。它不会被复制到str_val中(您停下来很短)。

由于您似乎希望str_len代表可打印字符的数量,所以我建议您将value分配为一个更大的值,并将最后一个字符设置为' 0'。

char* str::string::val() {
    char* value = new char[str_len + 1];

    for (unsigned i = 0; i < str_len; i++)
        value[i] = str_val[i];
    value[str_len] = '';
    return value;
}

以上是关于自定义字符串类的奇怪输出的主要内容,如果未能解决你的问题,请参考以下文章

vs code 自定义代码片段

VSCode创建自定义用户片段

将vscode打造成无敌的IDE添加自定义的snippet

将vscode打造成无敌的IDE添加自定义的snippet

VSCode自定义代码片段——CSS选择器

VSCode自定义代码片段6——CSS选择器