我发现了类似的帖子,但我对strtok_r
的问题没有明确的答案。
我正在使用strtok_r
来解析命令行以获取我需要通过带有标志的execv执行的命令,但是,出于测试目的,我打印出来。当试图划分多个字符,排除空格时,它工作正常。但是在测试空白时,请使用以下代码:
void tokenize(char *str1)
{
char *token;
char *saveptr1;
int j, i;
const char *delim = " ";
i = strlen(str1);
for(j = 0; j < i; j++, str1 = NULL)
{
token = strtok_r(str1, delim, &saveptr1);
if(token == NULL)
break;
printf("save: %s\n", token);
printf("\n");
}
}
我得到了测试字符串(ls -al
)的以下输出:
save: ls
答案 0 :(得分:1)
你怎么读字符串? 也许你正在阅读字符串,例如:cin&gt;&gt;串;或scanf(“%s”,str);只读取第一个标记(“ls”)。
相反,您应该使用类似cin.getline()或scanf(“%[^ \ n]”,str)的内容读取整行。检查一下!
为什么strtok_r不是strtok?
答案 1 :(得分:0)
你的for循环在每次循环后都设置str1=NULL
for(j = 0; j < i; j++, str1 = NULL)
{
...
}
所以第一次通过循环,它按预期工作,但之后,没有提取进一步的标记,因为str1
不再指向字符串。