用于指针赋值的C ++中的分段错误(核心转储)

时间:2014-03-08 14:23:03

标签: c++ string pointers memory memory-management

我创建一个不是零终止的常量char变量pStr

const unsigned char* pStr

我需要将它分配给std :: string

目前我正在使用

std::string s((char *)(pStr));

我也尝试过使用

std::string s(reinterpret_cast<const char *>(pStr));

我收到此错误"Segmentation fault (core dumped)"

感谢您的帮助。提前谢谢。

3 个答案:

答案 0 :(得分:2)

如果pStr指向的数组根据具有零值字符的C约定终止,那么你的狡猾的强制转换应该有效。

如果不是,那么你需要一些其他的方法来确定字符串的长度。一旦知道了,就可以从指针范围初始化字符串:

std::string s(pStr, pStr+length);

答案 1 :(得分:0)

这是一个正确的表达

std::string s(reinterpret_cast<const char *>(pStr)); 

转储的原因是指针无效,例如它等于NULL或它指向的字符串文字没有终止零。

答案 2 :(得分:-1)

Class A
{
  public : std::string myFunc( const unsigned char* a)
  {

   std::string s((char *)(a));

   return s;
  }
};
int main()
{
A sm;
cout<< sm.myFunc((const unsigned  char*)"abc");

}