可能有人给我解释一下什么样的差异之间存在着strtok()和strsep()?它们的优点和缺点是什么?为什么我会选择一个而不是另一个.
我试图在嵌套循环中使用strtok().但这并没有给我预期的结果.可能是因为他们使用相同的内存位置.我的代码形式如下: -
char *token1 = strtok(Str1, "%");
while(token1 != NULL )
{
char *token2 = strtok(Str2, "%");
while(token2 != NULL )
{
//DO SMTHING
token2 = strtok(NULL, "%");
}
token1 = strtok(NULL, "%");
// Do something more
}
Run Code Online (Sandbox Code Playgroud) 我意识到标题令人困惑,想不到更明确的方式来说出来.基本上,我在strtok循环中调用strtok循环,但是当内部strtok函数从runCommand返回时,我的第一个strtok循环停止.它只是退出循环,即使第一个分号后面还有其他参数.当我不调用runCommand()时,它按预期工作,并解析我用分号分隔的所有命令.
此代码的目标是解析由分号分隔的一行命令,然后解析命令和命令参数以便稍后进入execvp.这是我遇到麻烦的唯一部分.这里是:
void parseCommand(char *userLine)
{
if(strchr(userLine, ';'))
{
// Get first token
token = strtok(userLine, ";");
// Loop through all tokens
while(token != NULL)
{
// Make a copy
char *copy = malloc(strlen(token) + 1);
strcpy(copy, token);
runCommand(copy);
free(copy);
printf("process returned!\n");
token = strtok(NULL, ";");
}
}
}
void runCommand(char *token)
{
char *args[20];
char **command = args;
//Tokenize each command based on space
char *temp = strtok(token, " \n");
while (temp != NULL)
{
*command++ = temp;
temp …Run Code Online (Sandbox Code Playgroud) 我有一个看起来像1,3-5,7,9-11的字符串,我要通过重复调用strtok来标记它,以便输出看起来像:
1
3
5
7
9
11
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
#include <stdio.h>
#include <string.h>
void tokenize(char *string){
char *token;
token = strtok (string,"-");
while (token != NULL) {
// ... do some other unrelated stuff ...
printf("\tToken %s\n", token);
token = strtok (NULL, ",");
}
}
int main (int argc,char **argv)
{
char *token;
token = strtok (*(argv+1),",");
while (token != NULL) {
if (strchr(token,45)){ //45 is ASCII for "-".
tokenize(token);
}
printf("Token1 %s \n", token);
token = strtok (NULL, ",");
} …Run Code Online (Sandbox Code Playgroud)