您好我正在尝试从文本文件中进行简单的阅读。我需要拆分字符串因此我使用strtok。但是当我使用char *作为字符串时,它只是向我显示错误。
以下是我的代码。有什么建议吗?
void encrypt(fstream& afile,char* fileName,int size){
string txt,tmp;
int key[100][100],num,n=0,m=0;
afile.open(fileName,ios::in);
while (afile>>tmp)
{
txt = txt + tmp;
}
afile.close();
afile.open("keyfile.txt",ios::in);
char *pch = new char(100),*tmp2 = new char(100);
while (afile>>tmp2)
{
pch = strtok (tmp2,";");
while (pch != NULL)
{
key[n][m] = atoi(pch);
cout<<key[n][m]<<" ";
pch = strtok (NULL, ";");
m++;
}
cout<<endl;
n++;
}
delete []tmp2;
delete []pch;
afile.close();
}
答案 0 :(得分:1)
这为pch
和tmp2
分配了一个字符,并将该值设置为100:
char *pch = new char(100),*tmp2 = new char(100);
你想要的是这个:
char *pch = new char[100];
char *tmp2 = new char[100];
但是存在内存泄漏,因为您立即用pch
的返回值替换strtok
。因此无需为pch
分配。
此外,您可能刚刚为tmp2
声明了一个包含100个字符的数组,而不是动态分配:
char tmp2[100];
所有这一切归结为:
char *pch;
char tmp2[100];
在函数末尾不需要delete[]
。