C语言-字符串分割函数 strtok、strtok_r

发布时间:2024年01月19日

一、函数介绍

  1. 函数名
strtok, strtok_r - extract tokens from strings
//从字符串中提取标记
  1. 头文件
 #include <string.h>
  1. 文件原型
char *strtok(char *str, const char *delim);

char *strtok_r(char *str, const char *delim, char **saveptr);

二、测试代码

  1. 官方代码:
#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>

int main(int argc, char *argv[])
{
 char *str1, *str2, *token, *subtoken;
 char *saveptr1, *saveptr2;
 int j;

 if (argc != 4) {
     fprintf(stderr, "Usage: %s string delim subdelim\n",
             argv[0]);
     exit(EXIT_FAILURE);
 }

 for (j = 1, str1 = argv[1]; ; j++, str1 = NULL) {
     token = strtok_r(str1, argv[2], &saveptr1);
     if (token == NULL)
         break;
     printf("%d: %s\n", j, token);

     for (str2 = token; ; str2 = NULL) {
         subtoken = strtok_r(str2, argv[3], &saveptr2);
         if (subtoken == NULL)
             break;
         printf(" --> %s\n", subtoken);
     }
 }

 exit(EXIT_SUCCESS);
}

编译输出可执行文件a.out,输入指令

./a.out 'a/bbb///cc;xxx:yyy:' ':;' '/'

在这里插入图片描述

  1. 自测代码
#include <string.h> 
#include <stdio.h> 


int main(void) 
{ 
   char input[16] = "abc,d,D,E"; 
   char *p; 

   // strtok places a NULL terminator in front of the token, if found  
   p = strtok(input, ","); 
   if (p)   printf("%s\n", p); 

   // A second call to strtok using a NULL as the first parameter returns a pointer to the character following the token  
   //p = strtok(NULL, ","); 
   //if (p)   printf("%s\n", p); 
   //p = strtok(NULL, ","); 
   //if (p)   printf("%s\n", p); 
   //p = strtok(NULL, ","); 
   //if (p)   printf("%s\n", p); 
   while(p = strtok(NULL, ","))
   {
	printf("%s\n", p);
   } 
   return 0; 
} 

测试结果:
在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_46158019/article/details/135554686
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。