2 magiking1989 magiking1989 于 2014.11.18 18:48 提问

sprintf的循环使用问题
    int num;
double a[3] = {1.234,2.345,3.456};
char *p = (char *)malloc(sizeof(char) * 100);
char *point = p;
for (int i = 0; i < 3 ; i++)
{
    sprintf(point , "%3lf," , a[i]);
    for(int i = 0 ; p[i] ; i++)
    {
        num = i;
    }
    point += num+1;
}
cout<<p<<endl;

如上示例程序,通过循环使用sprintf函数,将数字数组a中的所有数字存入字符串p中,输出为什么只能将前两个数字存入,而第三个及后面的都没有存入?

6个回答

91program
91program   Ds   Rxr 2014.11.18 18:57

malloc来的空间,没有清零

AkibaTakuya
AkibaTakuya   2014.11.18 19:06

p[i] ---> point[i]

max_min_
max_min_   Rxr 2014.11.18 19:14

point += num+1; 改变了point的地址指向的首地址了!

a624731186
a624731186   2014.11.19 08:20

没看懂你要表达什么意思啊

但是我猜你是要让point++
但是point += num+1这么写,第一次+1,第二次又在第一次的基础上+2,同理第三次+3

到最后一共加了6

zilaishuichina
zilaishuichina   Rxr 2014.11.19 11:30

point += num+1; 改为 point = num+1;

eagleyan
eagleyan   Rxr 2014.12.01 07:57

这句有问题,你每次得到的num是最后一个非空的字符。而你每次递增point,这个是不对的,你先得到第一个point,然后加8,然后的到p + 8,获得第二个point,p得到两个point,然后在加下一个num,变成了p + 8 + 16,第三次得到的point就没有了,当然其实是得到了,只是因为打印的时候,由于中间原来是\0, 后面的没打印
point += num+1;

修改成point = p + num + 1;就好了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!