我有一个架构结构,例如
class sw_Type
{
char *Id; /* required attribute */
struct soap *soap; /* transient */
};
我使用
创建此对象soap_instantiate__sw_Type(....)
但我无法理解如何分配char
条目。我想我应该找到一个接受soap
的例程,返回char *
。我应该使用Id = (char *) (soap_malloc(_soapInst, sz * sizeof(char) ))
如果Id
为char **
,我将如何进行类似的分配?
答案 0 :(得分:1)
您应该执行以下操作,并使用define作为char数组的长度。
char * Id = (char *)soap_malloc(soap, ID_LEN);
您的示例中无需使用sizeof
。但是,如果要分配对象列表,则应使用Nof items x sizeof(struct ..)
。
关于char**
,您可以使用类似下面示例的内容
char** arguments_push = (char**) soap_malloc(soap, sizeof(char*)*ARGS_NUM);
答案 1 :(得分:1)
要在thahgr's answer上扩展一下,如果您需要实例化一个Id = (char**) soap_malloc(soap, sizeof(char*) * n);
成员,则可以像他们所说的那样进行:
char*
然后要实例化char**
中的每个单独的soap_malloc()
,您将像以前一样使用Id[0] = (char*) soap_malloc(soap, n0);
Id[1] = (char*) soap_malloc(soap, n1);
// etc.
:
soap
完成此soap_malloc()
上下文后,调用soap_free(soap)
时将释放使用soap_instantiate__T()
分配的所有内存。
(同样,您使用soap_instantiate__sw_Type()
分配的任何C ++对象(例如soap_destroy(soap)
,在调用char**
时都会被释放)
注意:如果您正在使用sw_Type
,并且希望__size
可以序列化(即可以作为字符串输出),您还需要在Id
成员下方添加一个class sw_Type
{
char **Id; /* required attribute */
int __size; /* required attribute */
struct soap *soap; /* transient */
};
成员:
__size
有关const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.label({ label: 'MY-SILLY-APP' }),
winston.format.timestamp(),
winston.format.metadata({ fillExcept: ['message', 'level', 'timestamp', 'label'] }),
winston.format.colorize(),
winston.format.printf(info => {
let out = `${info.timestamp} [${info.label}] ${info.level}: ${info.message}`;
if (info.metadata.error) {
out = out + ' ' + info.metadata.error;
if (info.metadata.error.stack) {
out = out + ' ' + info.metadata.error.stack;
}
}
return out;
}),
),
transports: [
new winston.transports.Console()
]
});
logger.info('running');
try {
throw new Error('failed');
} catch (err) {
logger.error('failing', { error: err });
}
logger.info('stopping');
的更多信息,请参见One-dimensional dynamic SOAP-encoded arrays上的gSOAP文档。