c++ - 使用带有 char 数组参数的 strtok

标签 c++

我正在尝试使用分隔符拆分一个字符数组。

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

#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

这里有什么问题?

最佳答案

字符串 argumnet 的内容(在您的例子中是 largechars)被这个函数 strtok 修改并分解成更小的字符串(标记)。但是在您的第一个示例中,第一个参数是 const char* 因此,当它尝试修改内容时,将导致运行时错误

关于c++ - 使用带有 char 数组参数的 strtok,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15289129/

相关文章:

c++ - 位域与位集

c++ - 将附加参数传递给 remove_if

c++ - 有什么好的方法可以指示计算机是否可以运行特定的程序/软件?

c++ - 如何更改 Shell_NotifyIcon 设置的系统托盘图标文本样式

c++ - 将 unique_ptr 分配给第一个内的另一个 unique_ptr 是否安全?

C++ HMENU 显示消息框

c++ - 错误 C1189 MFC

C++ 检查一个十六进制数是否由 ABCDEF1 OR 0 组成

c++ - 尝试使用 std::thread 时出现编译器错误

c++ - 如何在不将非法输入替换为替换字符的情况下解码 UTF-8?