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中,输出为什么只能将前两个数字存入,而第三个及后面的都没有存入?

malloc来的空间,没有清零

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

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

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

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

到最后一共加了6

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

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

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