使用 const char * 与 char * 创建自己的字符串

Create own string using const char * vs char *

本文关键字:char 自己的 字符串 创建 使用 const      更新时间:2023-10-16

我想创建自己的字符串存储(类(,我对const char *char *有所了解。

这是我来源的一部分:

class str_n
{
private:
    char * _str;
public:
    str_n(const char * str)
    {
          std::size_t Read_len = strlen(str);
          _str = (char *) malloc(Read_len + 1);
          memcpy(_str, str, Read_len + 1);
    }
};

我为我的_str使用了char *const char *,我知道如果我使用const char *我需要将其复制到char *我想在我的类中使用一些其他函数,并且还使用const char *char *更快(非常快(大约 2 倍((来保存const char * param内容。

现在我的问题:如果你想创建新的字符串存储,你使用const char *还是char *

如果您的str_n是可变的,请使用char *。您错了,因为常量内容是可修改的。例如,这个:

const char *foo = "foo";
foo[0] = 'a';

不会编译。试图用const_cast来规避它不是一个可行的选择:

const_cast<char *>(foo)[0] = 'a';

因为它是未定义的行为,并且通常会崩溃,因为foo被放入只读内存中。

因此,如果您的字符串是可变的,则必须复制示例中str(构造函数的参数(的内容(您没有选择使用 const char * 作为存储,并省略副本以使程序更快 - 我想你的意思是"快 2 倍",因为你省略了副本(。

注意:你应该使用new而不是malloc,它更像c++(你不需要强制转换来char * new char[...]的结果(

只需使用std::string

class str_n {
public:
    str_n(const char * str_in) : str{str_in} {}
private:
    std::string str;
};

您可以使用 .c_str() 方法从C++字符串中获取 C 字符串