为什么我使用snprintf得到运行时错误?

时间:2015-09-06 11:21:40

标签: c arrays string

我试图将一个整数数组,A []转换为字符串数组,B [],然后我终于将字符串数组转换为单个字符串。我收到了运行时错误。请检查。

for(i=0;i<n1;i++)
    {
        int a=A[i],digits=0;
        while(a!=0)
        {
            a=a/10;
            ++digits;
        }
        B[i]=(char*)malloc(digits+1);
        snprintf(B[i],digits+1,"%d", A[i]);
    }
    char *x=B[0];
    for(i=1;i<n1;i++)
        strcat(x,B[i]);

最后x包含我使用strcat函数通过连接所有B [i]&#39>创建的字符串

为什么运行时错误?

1 个答案:

答案 0 :(得分:2)

由于B[0]被初始化为某种“小”尺寸,因此A[0]位数的长度。 strcat然后写入未分配的内存。

解决此问题的方法是维护一个全局长度计数器,将x分配到正确的大小,并strcat包括B[0]在内的所有内容。