2012-07-19 53 views
2

我想一个进程的PID转换成一个const char *,但下面不工作:转换将为pid_t为const char *与字符串流

  std::ostringstream str_pid; 
     str_pid << getpid(); 
     const char * cstr_pid = str_pid.str().c_str(); 

它工作的大部分时间,但它也有错误的结果。显然我做错了什么。 有什么想法?

回答

4

cstr_pid将是一个悬挂指针,因为str_pid.str()返回的临时std::stringcstr_pid的赋值后被破坏。创建str_pid.str()返回值的副本:

const std::string my_pid(str_pid.str()); 

然后用my_pid.c_str()时,需要const char*

+0

啊!非常感谢! – user1132655 2012-07-19 14:59:47

+0

但是,如果在使用str_pid.str()构造后被破坏,它可能与my_pid一样。他正在处理生命时间对象,如果他返回my_pid.c_str(),他会遇到问题。 – coelhudo 2012-07-19 15:07:08

+0

@ coelhudo,我不建议在我的答案中缓存'c_str()'的返回值。 – hmjd 2012-07-19 15:08:26