2011-03-21 73 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