2016-03-24 22 views
2

Aşağıdaki programı denedim, ancak derleme yaparken "struct initializer'da çok az değer" olduğunu söyledi.yapısal başlatıcıda çok az sayıda değer C struct in golang

package main 

/* 
#include <stdlib.h> 
struct Person { 
    char *name; 
    int age; 
    int height; 
    int weight; 
}; 
*/ 
import "C" 
import "fmt" 

type p C.struct_Person 

func main() { 

    person := p{C.CString("Giorgis"), 30, 6, 175} 
    fmt.Println(person) 
    fmt.Println(C.GoString(person.name)) 
    fmt.Println(person.age) 
    fmt.Println(person.height) 
    fmt.Println(person.weight) 
} 

Bu kablolu sorunu nasıl giderebilirim? Ayrıca, "char *" türünü "char" olarak değiştirdiğimde ve başlatıcıyı. İyi çalışıyor. Ayrıca

struct Person { 
    char name; 
    int age; 
    int height; 
    int weight; 
}; 

, ben de iyi çalışıyor

struct Person { 
    char *name; 
}; 

kullanın.

Neyse, nasıl düzeltebilirim? Teşekkürler.

cevap

1

Lütfen alan adlarını struct literal'e yazmayı deneyin. isimsiz 4 baytlık padding alan adı ve yaş arasına sokulan olur çünkü

person := p{name: C.CString("Giorgis"), age: 30, height: 6, weight: 175} 

budur.

+1

Burada aşina değilseniz "dolgu" ifadesi şöyledir: http://c-faq.com/struct/align.html – AJPennster

+0

Teşekkür @AJPennster, Bağlantınızı cevaba ekledim. – Sebastian