通过分隔符strtok奇怪的行为拆分字符串

时间:2015-12-15 21:37:56

标签: c++ string parsing arduino

我正在尝试拆分字符串,但不幸的是strtok表现得非常奇怪

我有以下字符串get|user=password|23|info|hello我尝试使用strtok广泛使用的方法,但不幸的是它将=视为分隔符,我无法解析我的字符串。 因此get解析正确而不是仅解析user,而不是user=password

请帮助找到问题或建议任何其他方法来拆分字符串。 我正在为Arduino编程。

由于

代码

  const char delimeter = '|';
  char *token;
  token = strtok(requestString, &delimeter);
  // Handle parsed  
  token = strtok(NULL, &delimeter);

2 个答案:

答案 0 :(得分:4)

来自cppreference

  

delim - 指向标识分隔符的以空字符结尾的字节字符串的指针

您的方法不适合的要求是 null终止。您获取单个char的地址,但显然您无法访问此符号之后的任何内容。但是,strtok会搜索终止字符串的\0字符。因此,您将进入未定义的行为领域。

相反,请使用

const char* delimiter = "|";

答案 1 :(得分:2)

改变这个:

  const char delimeter = '|';

到此:

  const char * delimeter = "|";  // note the double quotes