char*上的memset的C++等价物

Par*_*ara 7 c++ memset memcpy

我有这个代码

  char * oldname = new char[strlen(name) + 1];

  memcpy(oldname,name,strlen(name) + 1);

  name = new char[strlen(oldname) + strlen(r.name) + 1];
  memset(name, '\0', strlen(name));

  strcat(name,oldname);
  strcat(name," ");
  strcat(name,r.name);
Run Code Online (Sandbox Code Playgroud)

我理解使用memcpy和memset是不行的,但我还没有完全理解如何在C++中使用它,最好没有std.

有人知道吗?谢谢.

jam*_*lin 10

总的来说,有std::fill.http://www.cplusplus.com/reference/algorithm/fill/

或者在这个特定的例子中,你应该考虑使用std::vector<char>.

(注意,memset如果你使用的话#include <cstring>,仍然可以在C++中使用,尽管它在C++中不那么惯用.)


CB *_*ley 9

memset当您拥有一组对象类型时,一种可能的替代方法是使用该std::fill算法.它适用于迭代器范围以及指向数组的指针.

memcpy通常可以通过调用替换呼叫std::copy.

例如

std::copy(name, name + strlen(name) + 1, oldname);
// ...
std::fill(name, name + strlen(name), '\0');
Run Code Online (Sandbox Code Playgroud)

memsetmemcpy仍然存在,并且可以在适当的时候使用,虽然.从许多C++开发人员的角度来看,使用原始new而不使用资源管理对象可能是一个更大的禁忌.使用a std::string或更好的std::vector<char>内存释放是自动的,代码更安全.

  • `std :: fill_n`可能是比填充更好的匹配.否则,好的答案,+ 1 + :) (4认同)

Par*_*ara -3

char * oldname = new char[strlen(name) + 1];

    //memcpy(oldname,name,strlen(name) + 1);
    strcpy(oldname,name);

    name = new char[strlen(oldname) + strlen(r.name) + 1];
    //memset(name, '\0', strlen(name));
    name[0] = '\0';

    strcat(name,oldname);
    strcat(name," ");
    strcat(name,r.name);
Run Code Online (Sandbox Code Playgroud)

我现在明白了这一点,只是想为所有未来的访问者粘贴此代码注释行与下面未注释的行等效。C 有注释,C++ 没有注释。