第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 C 中使用 GoString

在 C 中使用 GoString

Go
qq_笑_17 2021-10-18 11:00:23
由于 cgo,我正在嘗試在 C 程序中使用一些 Go 代碼我的 Go 文件如下所示:package helloimport (    "C")//export HelloWorldfunc HelloWorld() string{    return "Hello World"}我的 C 代碼是這樣的:#include "_obj/_cgo_export.h"#include <stdio.h>int main (){   GoString greeting = HelloWorld();   printf("Greeting message: %s\n", greeting.p );   return 0;}但是我得到的輸出不是我所期望的:問候語:我猜這是一個編碼問題,但關于它的文檔很少,我對 C 幾乎一無所知。你知道那段代碼出了什么問題嗎?編輯 :正如我剛剛在下面的評論中所說:我 [...] 試圖返回并僅打印一個 Go int(這是一個 C 的“l(fā)ong long”)并且也得到了錯誤的值。所以看起來我的問題不在于字符串編碼或空終止,而可能在于我如何編譯整個事情我很快就會添加我所有的編譯步驟
查看完整描述

2 回答

?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

printf期望以 NUL 結尾的字符串,但 Go 字符串不是以 NUL 結尾的,因此您的 C 程序表現(xiàn)出未定義的行為。請改為執(zhí)行以下操作:


#include "_obj/_cgo_export.h"

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


int main() {

   GoString greeting = HelloWorld();


   char* cGreeting = malloc(greeting.n + 1);

   if (!cGreeting) { /* handle allocation failure */ }

   memcpy(cGreeting, greeting.p, greeting.n);

   cGreeting[greeting.n] = '\0';


   printf("Greeting message: %s\n", cGreeting);


   free(cGreeting);


   return 0;

}

或者:


#include "_obj/_cgo_export.h"

#include <stdio.h>


int main() {

    GoString greeting = HelloWorld();


    printf("Greeting message: ");

    fwrite(greeting.p, 1, greeting.n, stdout);

    printf("\n");


    return 0;

}

或者,當然:


func HelloWorld() string {

    return "Hello World\x00"

}


查看完整回答
反對 回復 2021-10-18
?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

這個評論很好地描述了我的問題:Call go functions from C

你可以從 C 中調用 Go 代碼,但目前你不能將 Go 運行時嵌入到 C 應用程序中,這是一個重要但微妙的區(qū)別。

這就是我試圖做的,這就是它慘遭失敗的原因。

我現(xiàn)在正在研究新-buildmode=c-shared選項


查看完整回答
反對 回復 2021-10-18
  • 2 回答
  • 0 關注
  • 419 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號