2011-03-21 81 views
0

這個問題是ANSI C程序員與指針的經驗: (不能使用C++的新關鍵字:)Initilizing字符**字符串ANSI C的肥皂結構函數的參數使用

我做肥皂開發,並使用gsoap生成源代碼,所以我想使用聲明,因爲他們已經提供,如果可能的話。

對於我的應用程序使用我一直在考慮的原型如下:

soap_call___accounts(struct soap *soap, struct _acnt *acnt, struct _resp *resp); 

具有以下結構acnt定義爲:

struct acnt 
{ 
     int sizeacnt; 
     char **acntNum; 
}; 

我的問題是:

在我致電申請我需要使用結構成員acntNum作爲的一部分發送帳號,例如「00000123」參數在調用函數中,但在它可以用來做這件事之前,它需要被初始化。

char **acntNum如何正確初始化?

回答

0

另請參閱gSOAP 2.8.1 User Guide瞭解更多信息。

您的soap函數接受一組帳戶。因此,您不僅可以撥打賬戶「00000123」的肥皂功能,還可以在一次呼叫中使用兩個賬戶[「00000123」,「00000456」]。

要做到這一點,您不僅要分配內存,還要將大小參數設置爲您傳遞的帳戶數量。例如,您可以這樣做:

struct acnt Accounts; 
char *AccountToCheck = "00000123"; 

Accounts.sizeacnt=1; 
Accounts.acntNum = malloc(1 * sizeof(*Accounts.acntNum)); 
Accounts.acntNum[0] = AccountToCheck; 

soap_call___accounts(soap, &Accounts, &Response); 
+1

與littleadv的答案相同:不要從'malloc'投下結果。 – 2011-03-26 12:50:15

+0

確定改變後閱讀http://stackoverflow.com/questions/1565496/specifically-whats-dangerous-about-casting-the-result-of-malloc – wimh 2011-03-26 13:06:10

+0

忙得不亦樂乎,謝謝(雖然晚了)到@wimmel。從你的所有答案和評論中瞭解到,littleadv和某事。 (在評論中只允許有一個用戶地址。 – ryyker 2013-07-22 22:46:07

0
char *acntNumP = malloc(strlen("00000123")+1); 
strcpy(acntNumP, "00000123"); 
char ** acntNum = &acntNumP; 

檢查NULL當然在需要的地方。

+3

不要從'malloc()'強制返回值。這樣做可以隱藏你的代碼中的錯誤(即不包括'',因此錯誤地解釋了返回值)。 – pmg 2011-03-22 00:04:32

+0

@pmg:如何將'void *'強制轉換爲'char *'隱藏缺少的include? – littleadv 2011-03-22 00:10:30

+4

當你不包含正確的頭部時,沒有'void *'。在沒有聲明的情況下,編譯器假定函數返回'int'。將'int'強制轉換爲'char *'是由於不包含頭部而產生的問題。 – pmg 2011-03-22 00:18:56

相關問題