[英]Passing the right argument to strtok
我有这个字符串,我试图用strtok()
分隔:
"+ 2 3\\nln 9\\ln 10"
然后我将\\n
作为分隔符传递
token = strtok(argv, "\\n");
while (token)
{
args[index] = token;
token = strtok(NULL, "\\n");
index++;
}
我的args
表中的第一个元素是+ 2 3
,这很好,但是,第二个元素是l
。 有谁明白为什么? 如果是这样,我如何在我的args
表中获得我的ln 9
?
delim参数指定一组字节,用于分隔已解析字符串中的标记。 调用者可以在解析相同字符串的连续调用中在 delim 中指定不同的字符串。
因此,在您的代码中, "\\n"
不是完整的字符串分隔符。 您只是对strtok
说分隔符是'\'
(因为双退格转义)或'n'
。
您的字符串标记"+ 2 3\\nln 9\\ln 10"
将是:
"+ 2 3"
\
和\
之间的空字符串(strtok 不显示它)\
和n
之间为空(strtok 不显示)"l"
" 9"
\
和\
之间的空字符串(strtok 不显示它)"l"
" 10"
为了执行您要执行的操作, strtok
不是最佳选择。 我可能会编写自己的解析 function
strstr()
在原始字符串中查找"\\n"
次出现我完全同意 Roberto 和 Gerhardh 的上述回答和建议。
如果您对多分隔符的 strtok 的自定义实现感到满意,您可以使用以下工作解决方案。
char *strtokm(char *str, const char *delim)
{
static char *tok;
static char *next;
char *m;
if (delim == NULL) return NULL;
tok = (str) ? str : next;
if (tok == NULL) return NULL;
m = strstr(tok, delim);
if (m) {
next = m + strlen(delim);
*m = '\0';
} else {
next = NULL;
}
return tok;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.