C++标准库为我们提供了不少库函数用以支持数据类型的转换,总结了以下几个:
1.sprintf函数
在将各种类型的数据构造成字符串时,sprintf 的功能很强大。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。
sprintf 是个变参函数,定义如下:
int sprintf( char *buffer, const char *format [, argument] ... );
除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数;
例如:sprintf(s, "%d", 123); //产生"123"
sprintf(s, "%f", 3.1415926); //产生"3.141593"
sprintf(s, "%.2f", i); //错误
sprintf(s, "%.2f", (double)i); //错误
错误原因分析:参数压栈时调用者并不知道跟i相对应的格式控制符是个”%f”。而函数执行时函数本身则并不知道当年被压入栈里的是个整数,于是保存整数i 的那4 个字节就被强行作为浮点数格式来解释了,这样就整个乱套了。
2.stringstream对象
由于数据的类型在编译期就确定了,所以编译器拥有足够的信息来判断需要哪些转换。<sstream>库中声明的标准类就利用了这一点,自动选择所必需的转换。而且,