用c写的获取cpu信息,之后通过gsoap 2.8发布web服务。web服务返回的是cpu的信息,是一个符合json结构的字符串。
程序在32位Linux上编译运行无问题,Redhat 64位上编译无问题,但json字符串返回来的是乱码。
重新编译了gsoap,生成wsdl,都不行。
之后跟踪程序:
在soap结构中自己加了一个成员 char **ns_cpu;存放我想返回的json串。
使用这个在程序中各种 printf *soap->ns_cpu,
发现Stdsoap2.c中的这段出现问题:
if (soap_pointer_lookup(soap, p, t, &pp))
//在soap_pointer_lookup函数中return之前添加
//printf("lookup_in:%s %d\n",*soap->ns_cpu,strlen(*soap->ns_cpu));返回的字符串无问题
//soap_pointer_lookup函数返回0,直接跳转到else if
{
if (pp->mark1 == 0)
{ pp->mark1 = 2;
pp->mark2 = 2;
}
}
else if (soap_pointer_enter(soap, p, NULL, 0, t, &pp))
//在enter_in 函数中最开始的位置添加
//printf("jsonStr2:%s %d\n",*soap->ns_cpu,strlen(*soap->ns_cpu));返回的字符串出现问题
{
pp->mark1 = 0;
pp->mark2 = 0;
}
else
return 1;
输出为:
lookup_in: [{CPUType:"Intel(R) Xeon(R) CPU E5620 @ 2.40GHz",Processors:2,CPUCores:4,CoreThreads:8,AppTasks:405,TasksThreads:513,CpuSpeed:"2400.00 MHz",CpuSpeed:"2400.00 MHz",ThreadUsage:["0.00%","0.00%","0.00%","0.00%","0.00%","0.00%","0.00%","0.00%"],AverageUsage:"0.00%"}] 274
enter_in: [{CPUType:"Intel(R) Xeon(R) CPU E5620 @ 2.40GHz",Processors:2,CPUCores:4,CoreThreads:8,AppTasks:405,TasksThreads:513,CpuSpeed:"2400.00 MHz",CpuSpeed:"2400.00 MHz",ThreadUsage:["0.00%","0.00%","0.00%","0.00%","0.00%","0.00%","0.00%","0.00%"],AverageUsage:"0.00%"74
第一段是正确的,但紧挨着第二段就出错了。。。实在找不到原因了。。。。太诡异了……