//////返回指针的函数
char* CQteDlg::kk(int n)
{
char temp[6], *p;
char date[4][12]={"2004/2/9","dfd","dfdfd","dfdfdf"};
int k=strlen(date[n]);
if (k==10)
temp[5]='\0';
if (k==9)
temp[4]='\0';
if (k==8)
temp[3]='\0';
for ( int i = 0; i < 5; i++)
{
if (*(date[n]+i+5))
temp[i] = *(date[n] + i + 5 );
else
break;
}
    p=temp;
return p;////p指向了"2/9";
}/////////调用函数
char *pchar=kk(0);
AfxMessageBox(pchar);
为什么输出乱码呢?

解决方案 »

  1.   

    char *pchar="ddd";
    AfxMessageBox(pchar);
    这样确可以呢
      

  2.   

    temp[6]创建在堆栈上,返回后不再有效,除非你在它前面加上static
      

  3.   

    /////////调用函数
    char *pchar=new char[16];
    strcpy(pchar,kk(0));
    AfxMessageBox(pchar);
      

  4.   

    你这是什么程序啊,n要小于4是吧,date[4][12]=中最长的也就是8而已,先好好看看你自己写的东西吧
      

  5.   

    void CQteDlg::kk(int n, char*)这样调用:
    char * pchar = new char[xx];kk(x, pchar);AfxMessageBox(pchar);
      

  6.   

    若n=1或n=2你这段代码该怎么执行
    for ( int i = 0; i < 5; i++)
    {
    if (*(date[n]+i+5))
    temp[i] = *(date[n] + i + 5 );
    else
    break;
    }
    ???!!!!!!!!!!!!
    想没有乱码就怪了
    好好想想吧
      

  7.   

    不要以为若n=1时(*(date[1]+i+5))会是一个null值,它只会指向一个在这个地址上存在的一个数,值是多少是未知的