2017-07-19 192 views
0

我有一個C程序中,我有兩個結構如何將結構的內容複製到另一個結構用C

struct one{ 
    int a; 
    int b; 
    char *s; 
    int c; 
}; 

struct two{ 
    int a; 
    int e; 
    char *s; 
    int d; 
}; 

可以編寫一個函數,用相同的拷貝變量的值類型和名稱從struct onestruct two? 例如,在這種情況下,函數應該這樣做

two.a = one.a; 
two.s = one.s; 
+3

這僅僅是不正當的。 –

+1

如果** pone *指向一個,** ptwo *指向兩個然後* memcpy(one,two,sizeof(one)); *對它應該。 –

+0

所以你複製一個指針,但不是它指向的內容。假設你在第一個'struct'中釋放指針。在劫難逃。 –

回答

-1

好吧,如果你定義一個類型結構,如:

typedef struct 
{ 
int a; 
int b; 
char *s; 
int c; 
} Tstruct; 

然後進行2個變量(類型Tstruct):

Tstruct one; 
Tstruct two; 

這裏既然結構是同一類型,你可以很容易做到:

one=two; 

所有的結構兩個值將被轉移到一個結構完全一樣,如果你做的事:

one.a=two.a; 
one.b=two.b; 
... 
+0

相同的功能,定義該結構類型,完全像上面,並在函數中你會像: void StructSwitch(Tstruct struct_one,Tstruct struct_two) struct_one.a = struct_two.a; ... } – Terrexo

+0

我不能,導致結構也有不同的變量 –

+0

請閱讀問題。 OP只想複製那些共享相同名字的兩個類似'struct'的成員。 –

2

有沒有辦法從結構自動抓取特定名稱的領域。雖然你可以用Java做反射這樣的事情,但它不能在C中完成。你只需要手動複製相關的成員。

0

理論上,如果您確定您的編譯器按照其類型定義的順序對結構進行了排序,那麼您可以使用下面的代碼對上面的示例使用一個簡單的塊複製函數。不過,我認爲這不是一個好主意。使用與上面提出的答案之一中定義的相同類型的兩個數據結構,塊複製將更安全。

示例使用塊拷貝功能:

void main(void) 
{ 

    struct one{ 
     int a; 
     int b; 
     char *s; 
     int c; 
    }; 

    struct two{ 
     int a; 
     int e; 
     char *s; 
     int d; 
    }; 

    // Place code that assigns variable one here 

    memcpy(&two, &one, sizeof(one)); 
} 
+0

爲什麼要重新執行'memcpy'? –

0

您可以編寫函數宏是這樣的:

#define CAT(A, B) A ## B 
#define ARGS_ASSIGN(N, L, R, ...) CAT(_ARGS_ASSIGN, N) (L, R, __VA_ARGS__) 
#define _ARGS_ASSIGN1(L, R, M0) L.M0 = R.M0; 
#define _ARGS_ASSIGN2(L, R, M0, M1) L.M0 = R.M0; L.M1 = R.M1; 
/* ... define sufficiently more */ 

,在這種方式使用:

ARGS_ASSIGN(2, two, one, a, s) 
相關問題