- 论坛徽章:
- 0
|
请问为什么动态库不能返回字符串呢?请大家帮忙一下,代码如下
sjl05GeneratePinAndMacNEW是一个调用加密机的函数,这函数是封装在动态库.so里面的。
fprintf(stderr,"strPinKey==[%s]\n",strPinKey);这个输出语句都可以得到strPinKey的值
char *sjl05GeneratePinAndMacNEW(strZMK, strZMKKEY)
char *strZMK;
char *strZMKKEY;
{
static char strPinKey[33],strMacKey[33];
char strFile[128+1];
char strKeyUnderLMK[33];
FILE *fp;
int r;
memset(strPinKey,0x00,sizeof(strPinKey));
memset(strMacKey,0x00,sizeof(strMacKey));
memset(strFile, 0, sizeof(strFile));
fprintf(stderr,"1111111112312312\n");
if(strZMK[0]=='1')//产生PINKEY工作密钥
{
if ((r = sjl05GenerateRandomKeyNEW(strPinKey, strKeyUnderLMK, KEYTYPE_PIN, strZMKKEY)) < 0)
{
strcpy(strPinKey,"error");
return strPinKey;
}
fprintf(stderr,"strPinKey==[%s]\n",strPinKey);
return strPinKey;
}
else if(strZMK[0]=='2')//产生MACKEY工作密钥
{
if ((r = sjl05GenerateRandomKeyNEW(strMacKey, strKeyUnderLMK, KEYTYPE_MAC, strZMKKEY)) < 0)
{
strcpy(strMacKey,"error");
return strMacKey;
}
return strMacKey;
}
}
下面是主函数调用动态库
static char strPinKey[33],strMacKey[33];
char *p=NULL;
char strFile[512+1];
char strIp[20+1];
char strbuf[512];
memset(strPinKey,0,sizeof(strPinKey));
memset(strMacKey,0,sizeof(strMacKey));
strcpy(strbuf,"123");
p=sjl05GeneratePinAndMacNEW(strbuf,"1", "03e5");
fprintf(stderr,"bbbbbbbbbbbbbbbbbbbbb\n");
fprintf(stderr,"p====[%s]\n",p);
到fprintf(stderr,"p====[%s]\n",p);这个语句的时候内存就core掉了。我用的是静态调用,难道是静态调用不等返回值返回内存就释放掉了,而且我用的是静态变量,数据存放在常量区按道理不会啊,请大家指教。 |
|