[英]Float to Char Array to std::string
我对这段代码有点问题:
string StringServices::ToStringf(float value)
{
char buffer[10];
sprintf (buffer, "%f", value);
return (string) buffer; // signal SIGABRT
}
它以前一直在工作,并且可以继续用于其他调用,但是当函数被传递时,我目前在返回时得到了SIGABRT -211.0
缓冲区加载正常,我真的不确定为什么它不起作用。 谁能更好地理解std :: string和c字符串,那么我可以在这里帮助我吗?
您可能因为未使用snprintf
而使缓冲区溢出。 您已经将此标签标记为C ++,因此可以这样做:
std::string buffer = boost::lexical_cast<std::string>(value);
或不使用boost则使用字符串流:
std::ostringstream os;
os << value;
// os.str() has the string representation now.
C及其字符串函数的主要问题是您必须手动执行过多工作。 用C编写时,您还必须做出太多决策。琐碎的问题之一是缓冲区溢出。 考虑以下代码:
char buf[5]; // 5 chars, ok
sprintf(buf, "qwert"); // 5 letters, ok
您将在此代码上遇到问题,因为在谈论字符串时,5个字符表示4个字母+ '\\0'
。 因此,您可以尝试:
printf("'%s'\n", buf); // you'll probably get 'qwertIOUYOIY*&T^*&TYDGKUYTU&*#*#T^&#$T67...'
您对代码执行的操作是一个琐碎的缓冲区溢出:-)
sprintf()
无法检查buf
的大小,因此buf
之后的一块内存可能会损坏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.