int ClfKillDlg::split(LPTSTR part[], int MAX, LPCTSTR Source, LPCTSTR Delimit)
{
int nCount = 0;
CString strFullString(Source);
//LPTSTR *temp = part ;
part[nCount] = strtok(strFullString.GetBuffer (strFullString.GetLength ()),Delimit);
strFullString.ReleaseBuffer ();
while((part[nCount++] ) && nCount<MAX )
{
part[nCount] = strtok(NULL,Delimit);
} return nCount;
}
我这样子调用:
LPTSTR path[10];
split(&path[0],10,finder.GetFilePath(),"\\");但是有点不点哦。我需要的path[10],字串数组,没有被赋值啊。请问我要怎么传值?还是我函数不对?
我最开始,是想传个CString [],过去。但是不总是做不好~~望指教。。
{
int nCount = 0;
CString strFullString(Source);
//LPTSTR *temp = part ;
part[nCount] = strtok(strFullString.GetBuffer (strFullString.GetLength ()),Delimit);
strFullString.ReleaseBuffer ();
while((part[nCount++] ) && nCount<MAX )
{
part[nCount] = strtok(NULL,Delimit);
} return nCount;
}
我这样子调用:
LPTSTR path[10];
split(&path[0],10,finder.GetFilePath(),"\\");但是有点不点哦。我需要的path[10],字串数组,没有被赋值啊。请问我要怎么传值?还是我函数不对?
我最开始,是想传个CString [],过去。但是不总是做不好~~望指教。。
ZeroMemory(path, 10 * sizeof(LPTSTR));然后将while((part[nCount++] ) && nCount<MAX )改成while(nCount < MAX)试试看!
while(nCount<MAX )
{
part[nCount++] = strtok(NULL,Delimit);
}
path时LPTSTR数组!右不是char数组!我总感觉你已经把ClfKillDlg::split(LPTSTR part[], )中的part当作char数组了!但是事实上它却是char*数组!你使用while(part[nCount++] && ..)来判断什么啊?
从另外一种觉得你可以将part看这是一个int数组!
CString strFullString(Source);
因为strtok会改变它所要“分段”的字符串!但里的part数组中存放的也是这个字符串中的相应的地址!
但是strFullString为栈上的变量,在函数结束时strFullString所占用的内存被自动释放了!也就是说已经分好段的字符串不存在了!所以,最好将
int ClfKillDlg::split(LPTSTR part[], int MAX, LPCTSTR Source, LPCTSTR Delimit)
改成
int ClfKillDlg::split(LPTSTR part[], int MAX, LPTSTR Source, LPCTSTR Delimit)
即让split改变Source字符串!
你只要在调用split之前“备份”Source就可以了!下面是我的一段代码:
int _split(LPSTR part[], int nCount, LPSTR szSource, LPCSTR szDelimit)
{ LPSTR pstr;
int i = 0, len = 0;
pstr = strtok(szSource, szDelimit);
while (i < nCount)
{ part[i] = pstr;
printf(">>%d %s\n", part[i], part[i]);
i++;
pstr = strtok(NULL, szDelimit);
}
return i;
}调用:
char szPathBuff[MAX_PATH];
LPSTR part[5];
GetCurrentDirectory(MAX_PATH, szPathBuff);
_split(part, 5, szPathBuff, "\\"); // szPathBuff 字符串将会被_split更改! for(int i = 0; i < 5; i++)
printf("%d %s\n",part[i], (char*)part[i]);
Each call to strtok modifies strToken by inserting a null character after the token returned by that call