2013-05-27 65 views
2

我有以下代碼:如何傳遞結構作爲參數和memcpy它在C?

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

typedef struct 
{ 
    int a[3]; 
} A; 

typedef struct 
{ 
    int b; 
} B; 

typedef struct 
{ 
    A a; 
    B b; 
} C; 

void getC(C *c_p) 
{ 
    C c; 
    c.a.a[0] = 1; 
    c.b.b = 1; 
    memcpy(c_p, &c, sizeof(C)); 
} 

int main() 
{ 
    C *c; 
    getC(c); 
} 

和它說的過程中回來了,我實在找不出理由,我假設的memcpy部分沒有工作,任何人都可以幫助?

+1

你還沒有在'main'中爲'c'分配內存指向。你對未初始化的指針進行'memcpy',調用未定義的行爲。 –

+0

我沒有得到它 – user2131316

+0

爲什麼過程不會返回?這不像你正在做的任何事情可以阻止它回來。 –

回答

4

錯誤出現在您的main中,您將未初始化的指針傳遞給getC。你應該把它指向的東西,像這樣:

C c; 
getC(&c); 

C *c = malloc(sizeof(C)); 
getC(c); 
... 
free(c); 

而且,你不需要使用memcpystruct秒 - 轉讓也能發揮作用:

void getC(C *c_p) 
{ 
    C c; 
    c.a.a[0] = 1; 
    c.b.b = 1; 
    *c_p = c; // No memcpy 
} 
+0

+1,如果可以的話,我會添加另一個用於提及結構分配的+1。 :) – unwind

相關問題