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);
}
但它看起来有点乱。想法?
答案 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 = "";
}
}