smatch what; 
const char* str;
char buf[255];
if((strrchr(str, '-')))

  regex expression("\\w{6}-\\w{6}");//正则表达式
if(regex_search(str, what, expression))
{
   for(int i=0;i<what.size();i++)
   //printf(" %s\r\n", what[i].str);
   cout<<"str: " <<what[i].str()<<endl;//为什么这里换成上面printf那句就不行了了
   :: strcpy(buf, what[i].str().c_str());//这里为什么buf最后得到的不是what[i].str()的数据了
}
}
谢谢啦

解决方案 »

  1.   

    printf(" %s\r\n", what[i].str);
    ->
    printf(" %s\r\n", what[i].str());
      

  2.   

    Sorry,看你下面的代码应该是
    printf(" %s\r\n", what[i].str().c_str());
    吧,我猜你的str()返回的是string类型的对象
      

  3.   

    O(∩_∩)O谢谢,printf的问题解决了,还有就是第二个问题了: 
    :: strcpy(buf, what[i].str().c_str());//这里为什么buf最后得到的不是what[i].str()的数据了,我该怎么改了
      

  4.   

    char buf[255] = {0};
    初始化一下
      

  5.   

    memset(buf,0,255);
    :: strcpy(buf, what[i].str().c_str());
      

  6.   

    是的for(int i=0;i<what.size();i++)
    {
      //printf(" %s\r\n", what[i].str);
      cout<<"str: " <<what[i].str()<<endl;//为什么这里换成上面printf那句就不行了了
      :: strcpy(buf, what[i].str().c_str());//这里为什么buf最后得到的不是what[i].str()的数据了
    }
      

  7.   

    what[i].str().c_str();这里没越界?
      

  8.   

    怎么看是否越界,我buf调试时得到的结果是{???}
      

  9.   

    :: strcpy(buf, what[i].str().c_str());//这里为什么buf最后得到的不是what[i].str()的数据了
    -----------
    这里你是想把i为多少的what[i].str().c_str()的字符串copy到buf中去呢?
    如果for语句不{}后面的两句,for语句执行完成以后i的值为what.size()的,然后再执行
    这句:: strcpy(buf, what[i].str().c_str());
    what[i]应该就越界了
      

  10.   

    i只等于0啊,所以它只执行一次,我就觉得加不加大括号就无所谓了,what.size()永远等于1了
      

  11.   

    囧,小妹妹,你Debug下在for语句的地方打个断点,然后F10单步执行,看看执行到这句:: strcpy(buf, what[i].str().c_str());的时候i的值是多少,是否在数组的有效范围之内就会清楚了