免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2798 | 回复: 4
打印 上一主题 下一主题

关于动态库so调用返回指针的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-02 16:34 |只看该作者 |倒序浏览
请问为什么动态库不能返回字符串呢?请大家帮忙一下,代码如下
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掉了。我用的是静态调用,难道是静态调用不等返回值返回内存就释放掉了,而且我用的是静态变量,数据存放在常量区按道理不会啊,请大家指教。

论坛徽章:
0
2 [报告]
发表于 2010-09-02 16:48 |只看该作者
没人回答我的问题吗?

论坛徽章:
0
3 [报告]
发表于 2010-09-02 16:51 |只看该作者
我给JAVA调用的时候也是返回字符串的了,居然是成功的了,我自己C调用就不行?

论坛徽章:
0
4 [报告]
发表于 2010-09-08 15:32 |只看该作者
局部变量,退出时销毁。

论坛徽章:
0
5 [报告]
发表于 2010-10-11 16:21 |只看该作者
静态局部变量,仅能在函数内可见和使用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP