在数组C中的每个偶数后添加0个字符

时间:2015-12-15 13:22:18

标签: c arrays malloc realloc

我正在尝试在C中创建一个程序,在每个偶数后,将添加一个“0”。但我有一个问题。如果我仅插入偶数(5个或更多数字),程序崩溃。

以下是我现在的程序。

我想要一些指示或代码示例来指出我做错了什么以及如何解决它。

void main()
{
    int *a, i, n, m;
    printf("dimensiune=");
    scanf_s("%d", &n);
    a = (int*)malloc(n*sizeof(int));
    for (i = 0; i < n; i++)
    {
        printf("a[%d]=", i + 1);
        scanf_s("%d", &a[i]);
    }
    for (i = 0; i < n; i++)
    {
        if (a[i] % 2 == 0)
        {
            n++;                                        
            a = (int*)realloc(a, n*sizeof(int));        
            for (m = n - 1; m > i;m--)                  
            {       
                a[m + 1] = a[m];                        
            }
            a[i + 1] = 0;                               
            i++;                                        
        }
    }
    printf("\n currently you have %d numbers in this string\n", n);

    printf("your string \n");

    for (i = 0; i < n; i++)
    {
        printf("a[%d]=%d\n", i + 1, a[i]);
    }
}

3 个答案:

答案 0 :(得分:1)

更改:

for (m = n - 1; m > i;m--)                  
    {       
    a[m + 1] = a[m];                        
    }

为:

for (m = n - 1; m > i;m--)                  
    {       
    a[m] = a[m-1];                        
    }

我刚试过它,它为我工作,应该适合你。

答案 1 :(得分:0)

我发现这个循环存在问题:

didOutputMetadataObjects

当你开始循环时,n是循环中元素的数量。在第一次迭代期间,m是循环的最后一个元素的索引。因此, for (m = n - 1; m > i;m--) { a[m + 1] = a[m]; } 位于最后一个元素之后,产生缓冲区溢出。

答案 2 :(得分:0)

感谢所有评论我解决了使用int main(void)+ Shady Programmer提供的解决方案替换void main()的错误。