cnt = recv( stcpactive, (char*)precvbuf+i, recvdatalen-i, 0 );
  char  str[10];   
  itoa(precvbuf[0],str,10);   
  rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t(str)); 
上面是我程序中的一部分代码,我想接收precvbuf[0]里面的值,然后传给Excel。
但是不知道为什么老输出不来。我设置断点测试,发现precvbuf[0]=16448,而str=0x0107fcf0"烫烫烫烫烫烫0"
我把int型数据用itoa函数转换成字符型输出,应该没有问题的啊?大家看看问题在哪里,谢谢

解决方案 »

  1.   

    str=0x0107fcf0"烫烫烫烫烫烫0" 
    ==============
    str最后没有加结束符的"\0"
      

  2.   

    你在哪设的断点啊,执行过itoa了吗?
      

  3.   

    上面那几句都加了断点,一句一句调试的,执行过itoa了
      

  4.   

    这么加不可以吧?
    str=str+"\0";
      

  5.   

    字符串必须要用"\0"为表示结束,你定义char str[10],但是C++是不检查数组是否越界的,对于字符串来说,它认为遇到字符"\0"就是结束,你的str中没有这个字符,所以它不知道这个串到底多长,这样就产生了乱码,所以你只要在最后加上结束符就行了。
      

  6.   

    另外,如果你用的是MFC的话,大可以用CString来代替,它提供Format来进行转化工作,比用C的一些老的函数方便的多
      

  7.   

    您说的是这样吗?
    CString   str;   
    str.Format("%d",precvbuf[0]);
    但是显示的数据还不是我想要的str="16448"啊?我想把16448这个数输出到Excel文件中显示出来
      

  8.   

    还是不行啊,按上面这样写的str里面没东西
      

  9.   

    不行吗?应该可以啊,precvbuf是什么类型啊
      

  10.   

    precvbuf是整型
    int precvbuf[16384*4];
    确实是不可以啊????程序运行到
    str.Format("%d",precvbuf[0]);
    str连点反应都没有。一直显示着:CXX0017:Error:"str" not found
      

  11.   

    precvbuf[0]里面有啊,断点测试时的值是precvbuf[0]=16448,其他的也有,我想先弄完这一个数再弄其他的,哎呀,今天看来是来不及了,我要回去了,明天我再向你请教吧
      

  12.   

    字符数组缓冲区在申请后,使用前要先进行清零操作:
    memset(str,0,sizeof(str));
      

  13.   

    tabby ,xuxingok你们所说的数组要初始化,是指str?str定义的是个字符串。
     memset(str,0,sizeof(str));放在哪里?
    CString   str;
            memset(str,0,sizeof(str)); 
            str.Format("%d",precvbuf[0]);
    但是这样老提示: error C2664: 'memset' : cannot convert parameter 1 from 'class CString' to 'void *'
      

  14.   

    以下是断点调试的过程:
    cnt = recv( stcpactive, (char*)precvbuf+i, recvdatalen-i, 0 ); // 此时precvbuf[0]=0,st:"CXX0017:Error:"str" not found
    CString   str; //precvbuf[0]=16448,st:"CXX0017:Error:"str" not found

                    str.Format("%d",precvbuf[0]);//无变化 rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t(str));//无变化
      

  15.   

    晕..你上面不是char str[10]吗? 怎么一下又变成CString str了??char str[10];
    memset(str,0,sizeof(str));
    ..对str进行操作..
      

  16.   


    你是说的这样吧,我试试看
    char  str[10];  
    memset(str,0,sizeof(str)); 
    itoa(precvbuf[0],str,10); 
      

  17.   

    cnt = recv( stcpactive, (char*)precvbuf+i, recvdatalen-i, 0 ); //precvbuf[0]=0,str=0X0107fcf4"烫烫烫烫“
    char  str[10];  //precvbuf[0]=16443,str=0X0107fcf4"烫烫烫烫“memset(str,0,sizeof(str)); //precvbuf[0]=16443,str=0X0107fcf4"“itoa(precvbuf[0],str,10);//precvbuf[0]=0,str=0X0107fcf4"40073“Excel还是没有数据
      

  18.   

    cnt = recv( stcpactive, (char*)precvbuf+i, recvdatalen-i, 0 ); //precvbuf[0]=0,str=0X0107fcf4"烫烫烫烫“ 
    char  str[10];  //precvbuf[0]=16443,str=0X0107fcf4"烫烫烫烫“ memset(str,0,sizeof(str)); //precvbuf[0]=16443,str=0X0107fcf4"“ itoa(precvbuf[0],str,10);//precvbuf[0]=0,str=0X0107fcf4"40073“ 
    Excel还是没有数据 
      

  19.   

    memset(str,0,sizeof(str)); //precvbuf[0]=16443,str=0X0107fcf4"“ itoa(precvbuf[0],str,10);//precvbuf[0]=0,str=0X0107fcf4"40073“为什么你上面的第二条语句没有对precvbuf[0]进行操作,而里面的值变成0了??