C ++ char * split与strtok无法正常工作

时间:2014-10-26 01:05:07

标签: c++ char fstream strtok

您好我正在尝试从文本文件中进行简单的阅读。我需要拆分字符串因此我使用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();
}

1 个答案:

答案 0 :(得分:1)

这为pchtmp2分配了一个字符,并将该值设置为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[]