问题描述
- c sprintf函数第一个参数可以使动态数组吗?
-
string str="1234.56";
char *ch = new char[str.length()+1];
double tude = atof(str.c_str());
sprintf(ch, "%.5f", tude);
这样格式化double的变量,在内存的读取上存在问题吗?
解决方案
会有问题
因数浮点数精度的问题,可能格式出来需要的空间比原始的字符串空间要大。所以,会出来内存访问越界的问题!
1234.56 在使用浮点数表示时可能是:1234.5599999
解决方案二:
浮点数的打印和格式控制是sprintf 的又一大常用功能,浮点数使用格式符”%f”控制,默认保留小数点后6 位数字,比如:
sprintf(s, "%f", 3.1415926); //产生"3.141593"
有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m 表示打印的宽度,n 表示小数点后的位数。比如:
sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"
sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 "
sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142"
解决方案三:
【C语言】将数组作为函数的参数
解决方案四:
动态分配的数组本身没有问题,但是缓冲区要足够大。
时间: 2024-11-17 18:32:54