#include<iostream>
#include<stdlib.h>
using namespace std;
int spitString2(char *buf1,char c,char **myp,int *count)
{
//strcpy(buf2[0],"aaaaa");
//strcpy(buf2[1[,"bbbbb");
char *p=NULL,*pTmp=NULL;
int tmpcount=0;
//p和ptmp初始化
p=buf1;
pTmp=buf1;
//2 检索符合条件的位置 p后移 形成差值 挖空字符
p=strchr(p,c);
if(p!=NULL)
{
if(p-pTmp>0)
{
strncpy(myp[tmpcount],pTmp,p-pTmp);
myp[tmpcount][p-pTmp]='\0';//把第一行数据变成C风格字符串
tmpcount++;
//3重新让p和ptmp达到下一次检索的条件
pTmp=p=p+1;
}
}
}
void main()
{
int ret=0,i=0;
char *p1="aaaaa,bbbbb";
char cTmp=',';
int nCount;
char **p=NULL;
p=new (char **)[10*sizeof(char *)];//错误指示的地方
if(p==NULL)
{
return;
}
for(i=0;i<10;i++)
{
p[i]=new (char*)[30*sizeof(char)];//错误指示的地方
}
ret=spitString2(p1,cTmp,p,&nCount);
if(ret!=0)
{
cout<<"fun spitString2() err:"<<ret<<endl;
return ret;
}
for(i=0;i<nCount;i++)
{
cout<<p[i]<<endl;
}
/////释放内存
for(i=0;i<10;i++)
{
delete p[i];
}
delete []p;
}
//代码还不完整
cannot convert from 'char *** ' to 'char **
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答
- DukeSeraph 2016-04-30 05:16关注
p=new (char )[10*sizeof(char *)];//错误指示的地方
这里,p的类型是char,你使用new关键字申请了[10*sizeof(char )]这么大的内存,然而你指定的这个内存的存储类型是char*,所以最终你申请到的内存
是[10*sizeof(char )]大小的char*型内存块,new会返回一个指针,指向这个char**型的内存块,char**的指针不就是char***的吗?所以这里是你试图将
char***的内存指针赋给char**的p。
就像int a=new int[1];这个会报错,因为new int[1]会返回一个(指向一个int大小的内存的)指针。
所以int * a=new int[1];才是正确的做法。
如果你要用new申请的是char型的内存,你会得到char*,以此类推。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥30 这是哪个作者做的宝宝起名网站
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!