C++ 这个密码安全吗?

C++ 这个密码安全吗?,c++,C++,这段代码安全吗:编译器不会报告任何警告消息。如果要写入字符串,您需要为字符串分配一些存储空间 也许更重要的是,你必须停止在c_str上使用const_cast。你不能修改c_str指向的内存。目前,您的代码调用未定义的行为 即使这样,每次调用代码时也不一定会生成唯一的名称。您可能会非常接近地调用它两次,timeNULL会为两次调用返回相同的结果。或者,您可能会发现,即使使用不同的种子,您的RNG也会返回相同的值。不,这不安全 您的字符串中没有任何内容,您正在尝试向其中添加10项。您需要在字符串中

这段代码安全吗:编译器不会报告任何警告消息。

如果要写入字符串,您需要为字符串分配一些存储空间

也许更重要的是,你必须停止在c_str上使用const_cast。你不能修改c_str指向的内存。目前,您的代码调用未定义的行为

即使这样,每次调用代码时也不一定会生成唯一的名称。您可能会非常接近地调用它两次,timeNULL会为两次调用返回相同的结果。或者,您可能会发现,即使使用不同的种子,您的RNG也会返回相同的值。

不,这不安全

您的字符串中没有任何内容,您正在尝试向其中添加10项。您需要在字符串中保留如下空间:

const std::string makeUniqueName()
{
    srand(time(NULL));
    std::string s;                                                                                                             
    std::generate_n(const_cast<char*>(s.c_str()), 10, RndGenerator()); 
    return s;
}

如果你打算直接向它写东西。

绝对不安全。C++标准明确禁止CySTR指向的值修改。编译器不会因COSTRASCAST而抱怨,但仍然是错误的。

< P>显然,代码通过写入尚未分配的内存调用未定义的行为。或者为这些字符构造具有足够空间的字符串std::string s10,0;并通过std::开始生成或使用

此外,通过在const指针上使用const_cast,您再次调用了未定义的行为,从const对象中删除const,然后写入它是未定义的行为


另外:不要按常量值返回,它会禁止移动语义,您不希望这样。

不,当然不希望。generate\u n需要一个地方来写入数据。如果您发现自己正在使用const\u cast,但不明白原因,那么答案几乎肯定是否定的!不要将.c_str用于可写内存,请使用迭代器。从不按常量值返回。顺便说一句,按常量值返回并不安全,但可能会导致调用方效率低下。不要每次都调用srand-如果在一秒钟内调用两次,您将得到相同的名称。在程序启动时只执行一次。即使字符串中的内存是预先分配的,尝试使用c_str指针写入字符串也是非常糟糕的做法!使用你的建议,这个函数的完整实现会是什么样子?@MagnusHoff,嗯,我认为OP应该处理用我的建议产生的代码替换他自己代码的部分的任务-阅读back_inserter上的示例或调用std::begin不是火箭科学。
std::string s(10,' ');