繁体   English   中英

浮动到Char数组到std :: string

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM