相关疑难解决方法(0)

C中的strtok和strsep有什么区别

可能有人给我解释一下什么样的差异之间存在着strtok()strsep()?它们的优点和缺点是什么?为什么我会选择一个而不是另一个.

c strtok strsep

25
推荐指数
3
解决办法
2万
查看次数

在C中的循环中使用strtok()?

我试图在嵌套循环中使用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)

c string strtok

13
推荐指数
1
解决办法
1万
查看次数

Strtok里面的strtok没有使用原始令牌的副本 - C.

我意识到标题令人困惑,想不到更明确的方式来说出来.基本上,我在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)

c copy token strtok

1
推荐指数
1
解决办法
465
查看次数

嵌套while循环中的strtok意外行为

我有一个看起来像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)

c strtok

0
推荐指数
1
解决办法
307
查看次数

标签 统计

c ×4

strtok ×4

copy ×1

string ×1

strsep ×1

token ×1