2015-05-13 23 views
-2

我試圖寫入結構中的向量,但它不工作。 這裏是我的代碼:無法寫入結構中的向量c

#define BUFFER_SIZE 100 

typedef struct { 
    float vec[BUFFER_SIZE]; 
    int j; 
} send; 

int main(){ 

    send strucSend; 

    for(i=0; i<BUFFER_SIZE; i++){ 
     strucSend.vec[i]=i+1; 
     strucSend.vec[i]=100; 
     printf("created vec: %d \n", strucSend.vec[i]); 
    } 
} 

當我打印它時,它都是零。使用

gcc -o main main.c -lpthread -lrt

沒有錯誤或警告compilling編譯。 我在做什麼錯?預先感謝您的幫助。

編輯:這是因爲我想分配和intfloat

+4

什麼是'vecsaldos'?爲什麼它不工作?你必須解釋你期望程序做什麼以及它實際做了什麼。 –

+2

首先發布你的實際代碼,這將不會編譯。 –

+1

問題是因爲其他人指出'printf()'說明符是錯誤的,您必須發佈導致問題的代碼,因爲它必須是可重複的,您的代碼甚至不會編譯,所以這是一個問題,因爲@Gopi指出'我'是未聲明的,'vecsaldos'不在'send'結構中,等等。 –

回答

1
  1. i未定義。

  2. 您在使用int值爲float。你確定?

  3. 在您的代碼strucSend.vecsaldos[i]沒有意義。您沒有名爲vecsaldos的會員。如果你的意思是strucSend.vec[i],那麼它的類型是float。您必須使用%f轉換說明符。


編輯:

簡單地改變%d%f,爲你打印float。否則,使用不正確的轉換說明符會導致undefined behaviour

相關:從C11,章§7.21.6.1,fprintf()

如果任何參數是不正確的類型的相應的轉換說明書中,該行爲是未定義。

因此,要回答,

當我打印出來,這是所有零

答:UB的結果。

此外,作爲@Gopi先生提到的,在

strucSend.vec[i]=i+1; 
strucSend.vec[i]=100; 

一個合乎邏輯的錯誤在這裏,第一條語句是有效無用的,因爲你覆蓋相同的值。也許你也想修改那個部分。

+0

這是一個很好的答案,以及@ Gopi's,因爲即使OP沒有將真實代碼複製到問題主體,任何人在閱讀發佈的代碼時都會這樣想。 –

+0

我應該把'i'投到'float',菜鳥的錯誤...... –

+0

@DanielaMaia不用你不需要,你只需要用'「%f」'改變''%d「'。 –

2
  1. 我們沒有看到i定義,在

    for(i=0; i<BUFFER_SIZE; i++) 
    
  2. %f是格式說明打印出來浮動。

  3. 確定與下面的代碼它沒有任何意義

    strucSend.vec[i]=i+1; 
    strucSend.vec[i]=100; 
    
+1

'i'被定義,一切都被定義和編譯,這只是它不工作的部分... –

+1

@DanielaMaia然後發佈你編譯的代碼,而不是你發佈的代碼。 –