2011-12-12 44 views
-3

我正在尋找一種方法來從C中的數組中刪除條目。還要刪除結構中的條目。從C中的數組中刪除條目

我對C很新,任何想法如何去做?

UPDATE:

實測值是應該刪除從結構中的條目的代碼:

void removeEntry(student *st, int *nr, char nu[50]) 
{ 
    int k=0,i,j; 
    for(i=0;i<*nr;i++) 
    { 
     if(strcmp((st+i)->name,nu)==0) 
     { 
      k++; 
      for(j=i;j<(*nr-k);j++) 
      { 
       *(st+j)=st[j+1]; 
      } 
     } 
    } 

    *nr=*nr-k; 
} 
+2

您是否考慮閱讀一本關於C編程的好書? –

+0

您不能從結構中刪除條目。從數組中,您只需將要刪除項目後面的數組部分複製到其新位置。 –

+0

這幾乎是[這個問題]的愚蠢(http://stackoverflow.com/questions/1838835/how-to-delete-structure-entries-in-c),所以你可能會在那裏尋找一點點洞察你的問題。 – Nate

回答

3

要刪除一個動態分配的陣列(由存儲在數組中的實際類型替換T)一個條目:

// delete element i in array a of size n 
T *delete(T *a, size_t n, size_t i) 
{ 
    memmove(&(a[i]), &(a[i+1]), n - i - 1); 
    return realloc(a, sizeof(T) * (n - 1)); 
} 

如果順序並不重要,則更換memmovet[i] = t[n-1];

沒有辦法從struct中刪除成員。

+0

好吧,這是花哨而高效的方式;) –

+0

Guy剛剛開始。每天拿我1/2來弄清楚你在做什麼。 :( –

+0

@TonyHopkinson:OP在問C中的問題很簡單。 –

1

只需將所有的條目的條目後刪除其前面的位置,一個接一個。當您使用動態數組時,您可能還需要執行realloc來調整數組大小。