C 单字符strtok

C 单字符strtok,c,C,我必须使用以下格式标记字符串: pippo:c:C2,C3,C4:pippo 如何使用strtok标记这个字符串(一旦我完成了标记,就不需要这个字符串了)。我希望将单个字符存储到char变量中,而不是char*变量中。如果您只希望在:c:部分中使用c,并且您知道事情将采用这种格式,那么您不必进行标记化。你可以简单地做 char c = strchr(str, ':')[1]; 这将定位第一个:,并获取其后面的字符。当然,strtok也可以: strtok(str, ":"); char c

我必须使用以下格式标记字符串:

 pippo:c:C2,C3,C4:pippo

如何使用strtok标记这个字符串(一旦我完成了标记,就不需要这个字符串了)。我希望将单个字符存储到char变量中,而不是char*变量中。

如果您只希望在:c:部分中使用c,并且您知道事情将采用这种格式,那么您不必进行标记化。你可以简单地做

char c = strchr(str, ':')[1];
这将定位第一个:,并获取其后面的字符。当然,strtok也可以:

strtok(str, ":");
char c = strtok(NULL, ":")[0];
这将获取第二个标记化单词,并获取该单词的第一个字符。一般来说,如果您想让事情更进一步,您可能希望使用循环。这并不是说str缓冲区在这种情况下必须是可写的,与其他缓冲区不同

最后,如果
pippo
部分始终具有相同的长度,那么您只需

char c = str[6];

在所有情况下,
str=“pippo:c:C2,C3,C4:pippo”

如果要使用
strtok()
在两个标记之间获取单个字符,可以通过检查提取的字符串长度来实现

int main ()
{
    char str[] ="pippo:c:C2,C3,C4:pippo";
    char * pch;
    char winner;

    pch = strtok (str,":"); 
    while (pch != NULL)
    {
      if(strlen(pch) == 1){   // if there's only 1 char we got it
        winner = pch[0];      // if there's more than 1 single char of :x: format you
        break;                // could check for that too here.
      }
      pch = strtok (NULL, ":");
    }

    printf("And the winner is: %c\n", winner);
    return 0;
}

你在找什么角色?我认为你没有正确使用strtok,内部调用将返回“pippo”,外部调用将返回“pippo”[0]这只是“p”,你至少需要调用它两次。第二次为空