Обобщенная функция для передачи массива символов из C в Go

Я пытаюсь скопировать содержимое структуры в Go

type test struct {
    a string
    b string
}

к структуре С.

typedef struct {
    char a[10];
    char b[75];
}test_c;

Мое требование не позволяет мне изменять структуру типов членов как Go, так и C. Я написал следующий код, чтобы скопировать структуру Go в структуру C, и я тоже могу их скопировать.

cmain.h

typedef struct {
    char a[10];
    char b[75];
}test_c;
void cmain(test_c* value);

cmain.c

#include <stdio.h>
#include "cmain.h"
#include "_cgo_export.h"

void cmain(test_c *value) {
    printf("Inside C code\n");
    printf("C code structure Member:a=%s\n", value->a);
    printf("C code structure Member:b=%s\n", value->b);
}

go_func.go

 package main
 import (
    /*
        #include "cmain.h"
    */
    "C"
    "fmt"
    "unsafe"
)

type test struct {
    a string
    b string
}

func main() {

    var p_go test
    var p_c C.test_c
    p_go.a = "ABCDEFGHIJ"
    p_go.b = "QRSTUVXWYZ"
    fmt.Println(unsafe.Sizeof(p_c.a))
    StructMemberCopy(&p_c.a, p_go.a)
    fmt.Println("In GO code\n")
    fmt.Println("GO code structure Member:a=%s", p_go.a)
    fmt.Println("GO code structure Member:b=%s", p_go.b)

    fmt.Println("Call C function by passing GO structure\n")
    C.cmain((*C.test_c)(unsafe.Pointer(&p_c)))

}

func StructMemberCopy(dest *[10]C.char, src string) {
    for i, _ := range src {
        dest[i] = C.char(src[i])
        fmt.Printf("%d %c \n", i, src[i])
    }
}

Здесь я пытаюсь написать обобщенную функцию для копирования содержимого члена структуры Go в структуру C.

func StructMemberCopy(dest *[10]C.char, src string) {
        for i, _ := range src {
            dest[i] = C.char(src[i])
            fmt.Printf("%d %c \n", i, src[i])
        }
    }

В приведенном выше коде, когда я вызываю функцию StructMemberCopy(&p_c.a, p_go.a) с &p_c.a в качестве аргумента, код компилируется без ошибок, но когда я отправляю &p_c.b, он выдает ошибку

cannot use &p_c.b (type *[75]C.char) as type *[10]C.char in argument to StructMemberCopy

Может ли кто-нибудь дать некоторые сведения о том, как написать обобщенный аргумент для func StructMemberCopy, поскольку размер члена массива C Structure может варьироваться. Это может стать

typedef struct {
    char a[10];
    char b[75]; 
}test_c;

or typedef struct {
    char a[15];
    char b[40];
}test_c;

person Manu    schedule 21.11.2017    source источник
comment
Возможный дубликат: stackoverflow.com/ вопросы/37446623/   -  person JimB    schedule 21.11.2017
comment
Вы не можете изменить строку utf8 и преобразовать руны в C.char. Вам нужно сделать это по байтам.   -  person JimB    schedule 21.11.2017