使用带有char数组参数的strtok

时间:2013-03-08 07:49:09

标签: c++

我正在尝试使用分隔符拆分char数组。

这给了我一个运行时错误:

#include <iostream>
#include <cstring>
int main()
{
    char* largechars = "q=test&use=bingo";
    char* chars_array = strtok(largechars, "&");
    while(chars_array)
    {
        std::cout << chars_array << '\n';
        chars_array = strtok(NULL, "&");
    }
}

在这里演示http://ideone.com/OpNssn

这个程序运行正常:

#include <iostream>
#include <cstring>
int main()
{
    char largechars[] = "q=test&use=bingo";
    char* chars_array = strtok(largechars, "&");
    while(chars_array)
    {
        std::cout << chars_array << '\n';
        chars_array = strtok(NULL, "&");
    }
}

在这里演示http://ideone.com/Ye8C8k

这里有什么问题?

2 个答案:

答案 0 :(得分:0)

strtok()在解析字符串

时修改其参数

您的第一个示例提供了一个只读变量作为strtok的参数,因此您会收到运行时错误。在第二个示例中,您提供了一个可以修改的参数。

答案 1 :(得分:0)

字符串argumnet(在您的情况下为largechars)的内容被修改并通过此函数strtok分解为更小的字符串(标记)。但是在你的第一个样本中,第一个参数是const char*所以当它试图修改内容时会导致运行时错误