Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在数组C中的每个偶数后添加0字符_C_Arrays_Malloc_Realloc - Fatal编程技术网

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

在数组C中的每个偶数后添加0字符,c,arrays,malloc,realloc,C,Arrays,Malloc,Realloc,我正在尝试用C语言创建一个程序,在每个偶数之后,添加一个“0”。但我有个问题。例如,如果我只插入偶数(5个或更多数字),程序将崩溃 for (m = n - 1; m > i;m--) { a[m + 1] = a[m]; } 下面是我现在的程序 for (m = n - 1; m > i;m--) {

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

for (m = n - 1; m > i;m--)                  
    {       
    a[m + 1] = a[m];                        
    }
下面是我现在的程序

for (m = n - 1; m > i;m--)                  
    {       
    a[m + 1] = a[m];                        
    }
我想要一些指示或代码示例来指出我做错了什么,以及如何修复它

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]);
    }
}
for (m = n - 1; m > i;m--)                  
    {       
    a[m + 1] = a[m];                        
    }
void main()
{
int*a,i,n,m;
printf(“dimensune=”);
扫描频率(“%d”和“&n”);
a=(int*)malloc(n*sizeof(int));
对于(i=0;ii;m--)
{       
a[m+1]=a[m];
}
a[i+1]=0;
i++;
}
}
printf(“\n当前此字符串中有%d个数字\n”,n);
printf(“您的字符串”);
对于(i=0;i
我发现这个循环有一个问题:

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

启动循环时,n是循环中的元素数。在第一次迭代中,m是循环最后一个元素的索引。因此,
m+1
位于最后一个元素之后,造成了缓冲区溢出。

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

更改:

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

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

我刚刚测试过,它对我有效,应该对你有效

void main()
最好是
int main(void)
之类的。这个问题已经解决了,谢谢,你能解释一下为什么void main()和int main(void)之间有什么区别吗?使用
realloc
并直接分配回要重新分配的指针时要小心,如果
realloc
失败,它将返回
NULL
,您将失去原始指针。
void main()
是定义入口点的实现定义方式
intmain(void)
是标准之一。不,你没有,我刚刚将代码注入我的编译器,即使使用
intmain(intargc,char**argv)
查看我的答案以获得正确的修复。我尝试了你的意见,效果很好,感谢你花时间测试我的代码。:)
for (m = n - 1; m > i;m--)                  
    {       
    a[m + 1] = a[m];                        
    }