| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1061 人关注过本帖, 1 人收藏
标题:新年快乐!返回值问题
只看楼主 加入收藏
fuyucao
Rank: 1
等 级:新手上路
帖 子:67
专家分:7
注 册:2011-10-17
结帖率:100%
收藏(1)
已结贴  问题点数:30 回复次数:15 
新年快乐!返回值问题
先祝大家龙年大吉!
char  *regcompx(const char* str)
  {
     smatch what;
     char buf2[255];
     char   *pstr,*pst;
     pstr=NULL;
   //cpos = strrchr(lbody, '-');//在lbody中查找'-'最后一次出现的位置,最后返回指向'-'的指针
  if((strrchr(str, '-')))
    {
     regex expression("\\w{6}-\\w{6}");//正则表达式
     if(regex_search(str, what, expression))//在str中查找expression的字串 并放入到what里面
     {
          // bool s=regex_match(str, what, expression);
          for(int i=0;i<what.size();i++)
          printf(" %s\r\n", what[i].str().c_str());
          //cout<<"str: " <<what[i].str()<<endl; //cout<< " "<<endl 输出并换行 endl相当于换行
          int len = 0;
          char key[]={0,2,0,0,9,3,5,1,9,8,0,0,9,1,7,5},buf[255]= {0};
          ::memset(buf, 0, sizeof(buf));//对较大的结构体或者数组(buf)进行清零操作
          :: strcpy(buf, what[0].str().c_str());
          Des_Go(buf, buf, 13, key, sizeof(key), ENCRYPT);
          strncpy(buf2,buf,255);//将buf中最多255个字符复制到buf2中
          len = ::strlen(buf);
          if(len == 16)
          {
            CString st;
            for(int i = 0; i < len; i++)
            {
                BYTE tmp;
                CString st1;
                tmp = buf[i];
                st1.Format("%X%X",(tmp >> 4) & 0x0f, tmp & 0x0f);
                st = st + st1;
            }
             pstr=(LPSTR)(LPCTSTR)st;//CString转化为char*
           }
     }     
      else
      {

      }
      //return 0;
        // pst = pstr;
  }
  return pstr;
}
部分代码如上,函数能够编译通过,但最后返回的pstr为乱码,请各位帮帮忙,O(∩_∩)O谢谢
搜索更多相关主题的帖子: str expression 表达式 
2012-02-02 11:05
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
收藏
得分:0 
直接返回cstring多好

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-02 11:13
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:10 
这叫一个乱啊
 CString st;是局部变量 只在相关作用域内起作用

改为静态或全局
2012-02-02 11:19
fuyucao
Rank: 1
等 级:新手上路
帖 子:67
专家分:7
注 册:2011-10-17
收藏
得分:0 
回复 2楼 闲出屁
直接返回它会报错:
error C2440: 'return' : cannot convert from 'class CString' to 'char *'
2012-02-02 11:25
fuyucao
Rank: 1
等 级:新手上路
帖 子:67
专家分:7
注 册:2011-10-17
收藏
得分:0 
回复 3楼 hahayezhe
  先谢谢了
我把st改为全局变量还是不行了
2012-02-02 11:30
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
收藏
得分:0 
没boost
调试下 看函数内部有没有问题 如果函数内部没问题 但是返回值有问题 那么你就拷贝一下

程序代码:
char  *regcompx(const char* str)
{
    CString sz;
    sz = str;
    char pstr[100] = "";
    strcpy(pstr, (LPSTR)(LPCTSTR)sz);
    return pstr;
}



调用:
char pstr[100] = "";
    strcpy(pstr, regcompx("xxx"));
    cout<<pstr<<endl;


我这样就没问题了

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-02 11:35
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
pstr=(LPSTR)(LPCTSTR)st;//CString转化为char*
改为pstr = st.Getbuffer()
2012-02-02 11:35
fuyucao
Rank: 1
等 级:新手上路
帖 子:67
专家分:7
注 册:2011-10-17
收藏
得分:0 
回复 7楼 hahayezhe
报错:
error C2039: 'Getbuffer' : is not a member of 'CString'
2012-02-02 11:40
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
收藏
得分:5 
以下是引用fuyucao在2012-2-2 11:05:14的发言:

先祝大家龙年大吉!
char  *regcompx(const char* str)
  {
     smatch what;
     char buf2[255];
     char   *pstr,*pst;
     pstr=NULL;
   //cpos = strrchr(lbody, '-');//在lbody中查找'-'最后一次出现的位置,最后返回指向'-'的指针
  if((strrchr(str, '-')))
    {
     regex expression("\\w{6}-\\w{6}");//正则表达式
     if(regex_search(str, what, expression))//在str中查找expression的字串 并放入到what里面
     {
          // bool s=regex_match(str, what, expression);
          for(int i=0;i
代码够乱的,原则只有一个,不要返回函数内部(栈上的)的指针,楼主的返回值是指针,看看返回的是不是函数内部的指针就好了

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-02-02 11:41
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
以下是引用闲出屁在2012-2-2 11:35:38的发言:

没boost
调试下 看函数内部有没有问题 如果函数内部没问题 但是返回值有问题 那么你就拷贝一下
 
char  *regcompx(const char* str)
{
    CString sz;
    sz = str;
    char pstr[100] = "";
    strcpy(pstr, (LPSTR)(LPCTSTR)sz);
    return pstr;
}
 
 
调用:
char pstr[100] = "";
    strcpy(pstr, regcompx("xxx"));
    cout<
不要学这个
char pstr[100] = ""; 是在栈上

还有CString类的 Getbuffer函数会返回该对象内的存储缓冲区首地址
A码返回char*, 所以没必要 (LPSTR)(LPCTSTR)的强转(有的编译器将虚指针放在首位 这样转就会出错)


2012-02-02 11:42
快速回复:新年快乐!返回值问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017237 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved