编译器在strstok()(C ++)之后没有继续

时间:2014-04-23 16:45:55

标签: c++ strtok

我使用带有while循环的strtok()函数进行编译,但是在while循环之后的任何东西似乎都不存在于编译器中:

int main()
{
    int j = 1;
    char a[60] = "ion ana adonia doina doinn ddan ddao . some other words ";
    char *pch[36];
    pch[0] = strtok(a, ".");
    while (pch[j + 1] != NULL)
    {
        cout << pch[j - 1] << endl;
        pch[j] = strtok(NULL, ".");
        j++;
    }
    cout << "hello!"; //this doesnt display at all
        return 0;
}

我正在使用无c。

2 个答案:

答案 0 :(得分:3)

除此之外,你的while循环结束条件是错误的。你正在检查pch[j + 1],它总是未初始化的内存,导致循环不可预测地继续,直到你在内存中遇到零,这可能导致循环停止。

另一方面,由于其字符串破坏,我高度不鼓励在C ++中使用strtok。 Boost有一个非常好的字符串解析工具,即使在基本的C ++语言中,它也足够简单,可以使用内置的字符串功能进行大多数解析。

答案 1 :(得分:0)

你的代码很奇怪。试试这个:

int main()
{
    int j = 0;
    char a[60] = "ion ana adonia doina doinn ddan ddao . some other words ";
    char *pch[36];
    pch[j] = strtok(a, ".");
    while (pch[j] != NULL)
    {
        cout << pch[j] << endl;
        pch[++j] = strtok(NULL, ".");
    }
    cout << "hello!"; //this doesnt display at all
    return 0;
}