Инициализация строки char ** в ansi C для использования в аргументе функции структуры мыла - PullRequest
0 голосов
/ 22 марта 2011

Этот вопрос для ANSI C программистов с опытом работы с указателями: (не могу использовать ключевое слово c ++ new:)

Я занимаюсь разработкой мыла и имею исходный кодгенерируется с использованием gsoap, поэтому я хотел бы использовать объявления, если они были предоставлены, если это возможно.

Для использования в моем приложении мне был предоставлен следующий прототип:

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

со следующимиструктура для acnt определена как:

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

Мой вопрос:

В моем приложении для вызова мне нужно отправить номер счета, например "00000123", используя член структуры acntNumкак часть аргумента acnt в вызывающей функции, но прежде чем его можно будет использовать для этого, его необходимо инициализировать.

Как правильно инициализировать char **acntNum?

Ответы [ 2 ]

0 голосов
/ 26 марта 2011

Для получения дополнительной информации см. Также gSOAP 2.8.1 Руководство пользователя .

Ваша функция 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);
0 голосов
/ 22 марта 2011
char *acntNumP = malloc(strlen("00000123")+1);  
strcpy(acntNumP, "00000123");  
char ** acntNum = &acntNumP;

Проверьте для NULL s, где это необходимо, конечно.

...