总是搞不明白指针作为函数的传递参数时的用法,自己做了个例子,
部分代码如下,请大侠们指正:
OnButton1() 
{
CString str; char* pFilePath[1024];//pFilePath指向字符串数组,不知这样是否可以? //get filepaths
for(int i = 0;i < index;i ++)
{
m_lstFileList.GetText(i,str);//m_lstFileList是一个CListCtrl控件,列出了文件路径;
pFilePath[i] =str.GetBuffer(str.GetLength());
}

Display(pFilePath,index);
}Display(char *pFilePath[1024], int nFileNum)
{
    CString str;

for (int i = 0;i < nFileNum;i ++)
{
str = pFilePath[i];
AfxMessageBox(str);
}
return TRUE;
}
能够正常编译,弹运行后,不能正常显示每个str的值,为什么啊?
请问大侠们如何用char声明字符串数组啊?如何进行函数之间的传递呢?
多谢,盼复!

解决方案 »

  1.   

    同一个str,所以赋给pFilePath[i]的值是一个
      

  2.   

    pFilePath[i] =str.GetBuffer(str.GetLength());
    改成
    pFilePath[i] = new char[str.GetLength()];
    strcpy(pFilePath[i], (LPCSTR)str);
      

  3.   

    那是当然的
    char* pFilePath[1024];是局部函数,在堆栈理声明的,离开函数就释放了
    声明为全局变量或动态开辟空间
      

  4.   

    不明白啊,那如何得到pFilePath指向的每个字符串呢?
    能说的详细点吗
      

  5.   

    在Display()函数中如何依次得到每个字符串呢?我只能得到一个
      

  6.   

    1、引用:
    “char* pFilePath[1024];//pFilePath指向字符串数组,不知这样是否可以?”错!pFilePath是一个指向一个以0结束的字符串的指针。不是字符串数组的指针。2、for(int i = 0;i < index;i ++)
    {
    ……
    pFilePath[i] =str.GetBuffer(str.GetLength());
    }
    你这样写有问题。每循环一次都要覆盖字符串pFilePath中的一些数据。当然得不到正确的结果了。本质上还是没有搞清楚pFilePah是什么东西。Display()里也有类似的问题!!