簡體   English   中英

在數組C中的每個偶數之后添加一個0字符

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

我正在嘗試在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]);
    }
}

更改:

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

至:

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

我剛剛測試過,它對我有用,應該對您有用。

我看到此循環有問題:

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

啟動循環時,n是循環中元素的數量。 在第一次迭代中,m是循環最后一個元素的索引。 因此, m+1在最后一個元素之后,從而導致緩沖區溢出。

感謝所有評論,我解決了用int main(void)替換void main()和Shady Programmer提供的解決方案的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM