簡體   English   中英

為什么此C程序的輸出不正確

[英]Why output of this C program is not correct

我已經編寫了這樣的交流程序,希望能獲得正確的輸出。

 #include <stdio.h>
 #include <stdlib.h>

 int main()
 {
     int t;
     scanf("%d", &t);
     int a[t-1], b[t-1];
     //printf("%d\n",sizeof(a) );
     do{
     scanf("%d %d", &a[t-1], &b[t-1]);
     }while(--t);

    do{
         printf("%d\n",a[t-1] + b[t-1]);
    }while(--t);

    return 0;
 }

但是我得到的是隨機值,這個程序怎么了? 嘗試輸入嘗試次數,然后輸入值,然后打印這些值的加法。

PS數組初始化在這里是動態的,是否有效?

聲明長度為10的數組時,索引為09 該數組沒有索引10

在您的代碼中,數組的大小為t-1

int a[t-1], b[t-1];

因此,在您的第一次迭代中, scanf()printf()語句訪問a[t-1] ,該參數不存在。 而且,由於它是一個do while循環,因此可以保證至少運行一次。

訪問數組超出其邊界是未定義的行為 因此,正如Cool Guy在評論中指出的那樣,任何事情都可能發生。

在讀取所有值和打印所有值之間,您永遠不會將t重置為其原始值。 您可能需要執行此操作,可能使用另一個變量來保存其原始值。

數組大小應為常數,不能在運行時設置。 對於運行時內存分配,您需要將指針變量與malloc函數一起使用。 因此,首先您需要在聲明時為變量t分配一個常量值。

提示,請務必在任何語句之前聲明和初始化變量。 數組初始化應該在scanf之前進行,通過這樣做,您可以清楚地看到問題,即您正在分配內存(隨機地),然后從用戶那里獲得價值。 編譯器必須做類似的事情,分配一些隨機大小的內存,然后獲取值t,現在此值t將僅在您的迭代中使用,而不用於數組分配,因為數組之前以一定的rand大小分配(無論有什么垃圾t在聲明時指向的值)。 該程序有時會顯示一些隨機值,有時會在訪問超出范圍的內存時崩潰。

暫無
暫無

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

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