Лучший способ обработать хранение (возможно, NULL) char * в std :: string - PullRequest
0 голосов
/ 30 апреля 2010
class MyClass
{
 public:
  void setVar(const char *str);
 private:
  std::string mStr;
  int maxLength; //we only store string up to this length
};

Каков наилучший подход для реализации setVar, когда вполне вероятно, что внешний код передает NULL для пустой строки (и не может быть изменен)? В настоящее время я делаю что-то вроде:

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

Но это выглядит немного грязно. идеи?

Ответы [ 2 ]

4 голосов
/ 30 апреля 2010

Код, который вы опубликовали, неверен, так как он всегда будет читать maxLength символов из исходной строки. В частности, это означает, что он будет читать после конца пустой строки, когда str равно NULL. Это будет работать вместо этого, предполагая, что str заканчивается нулем:

void MyClass::setVar(const char *str)
{
    if (str==NULL)
        mStr.clear();
    else
        mStr.assign(str, std::min(strlen(str), maxLength));
}
2 голосов
/ 30 апреля 2010
void MyClass::setVar(const char *str) 
{ 
    if (str) {
       mStr.assign(str, str + std::min(strlen(str), maxLength) ); 
    } else {
       mStr = "";
    }
} 
...