在std :: string中处理存储(可能为NULL)char *的最佳方法

时间:2010-04-30 10:38:44

标签: c++ stl char

class MyClass
{
 public:
  void setVar(const char *str);
 private:
  std::string mStr;
  int maxLength; //we only store string up to this length
};

当外部代码很可能为空字符串传递NULL(并且无法更改)时,实现setVar的最佳方法是什么?我目前做的事情有点像:

void MyClass::setVar(const char *str)
{
 mStr.assign(str ? str : "",maxLength);
}

但它看起来有点乱。想法?

2 个答案:

答案 0 :(得分:4)

您发布的代码不正确,因为它始终会从源字符串中读取maxLength个字符。特别是,这意味着当str为NULL时,它将读取空字符串的末尾。这将起作用,假设str为空终止:

void MyClass::setVar(const char *str)
{
    if (str==NULL)
        mStr.clear();
    else
        mStr.assign(str, std::min(strlen(str), maxLength));
}

答案 1 :(得分:2)

void MyClass::setVar(const char *str) 
{ 
    if (str) {
       mStr.assign(str, str + std::min(strlen(str), maxLength) ); 
    } else {
       mStr = "";
    }
}