简体   繁体   English

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

[英]adding a 0 char after every even number in an array C

I'm trying to create a program in C which, after every even number, will add a "0". 我正在尝试在C中创建一个程序,该程序在每个偶数之后都将添加一个“ 0”。 But I have a problem. 但是我有一个问题。 If I insert for example only even numbers (5 or more numbers) the program crashes. 例如,如果我仅插入偶数(5个或更多数字),程序将崩溃。

Below is the program I have right now. 以下是我现在拥有的程序。

I would like some indications or a code sample to point out what I did wrong and how I can fix it. 我想要一些指示或代码示例来指出我做错了什么以及如何解决。

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]);
    }
}

Change: 更改:

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

to: 至:

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

I've just tested it, it's working for me, should work for you. 我刚刚测试过,它对我有用,应该对您有用。

I see a problem with this loop: 我看到此循环有问题:

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

When you start the loop, n is the number of element in the loop. 启动循环时,n是循环中元素的数量。 During the first iteration, m is the index of the last element of the loop. 在第一次迭代中,m是循环最后一个元素的索引。 So, m+1 is after the last element, creating a buffer overflow. 因此, m+1在最后一个元素之后,从而导致缓冲区溢出。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM