字符串分割strtok_s

https://blog.csdn.net/hustfoxy/article/details/23473805/

1)、strtok函数

函数原型:char * strtok (char *str, const char * delimiters);

参数:str,待分割的字符串(c-string);delimiters,分割符字符串。

该函数用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delimiters中包涵的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针。
需要注意的是,使用该函数进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。第一次分割之后,原字符串str是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中,因此多线程同时访问该静态变量时,则会出现错误。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char str[]="ab,cd,ef";
    char *ptr;
    printf("before strtok:  str=%s\n",str);
    printf("begin:\n");
    ptr = strtok(str, ",");
    while(ptr != NULL){
        printf("str=%s\n",str);
        printf("ptr=%s\n",ptr);
        ptr = strtok(NULL, ",");
    }
    system("pause");
    return 0;

2)、strtok_s函数
strtok_s是windows下的一个分割字符串安全函数,其函数原型如下:
char *strtok_s( char *strToken, const char *strDelimit, char **buf);
这个函数将剩余的字符串存储在buf变量中,而不是静态变量中,从而保证了安全性。

strtok_s(strToken, strDelimit, context,locale)

strToken

这个参数用来存放需要分割的字符或者字符串整体

strDelimit

这个参数用来存放分隔符(例如:,[email protected]#$%%^&*() \t \n之类可以区别单词的符号)

context

这个参数用来存放被分割过的字符串

locale

这个参数用来储存使用的地址

在首次调用strtok_s这个功能时候会将开头的分隔符跳过然后返回一个指针指向strToken中的第一个单词,在这个单词后面茶插入一个NULL表示断开。多次调用可能会使这个函数出错,context这个指针一直会跟踪将会被读取的字符串。

#include <string.h>
#include <stdio.h>

char string[] =
".A string\tof ,,tokens\nand some  more tokens";
char seps[] = " .,\t\n";
char *token = NULL;
char *next_token = NULL;

int main(void)
{
    printf("Tokens:\n");

    // Establish string and get the first token:
    token = strtok_s(string, seps, &next_token);

    // While there are tokens in "string1" or "string2"
    while (token != NULL)
    {
        // Get next token:
        if (token != NULL)
        {
            printf(" %s\n", token);
            token = strtok_s(NULL, seps, &next_token);
        }
    }
    printf("the rest token1:\n");
    printf("%d", token);
}

原文地址:https://www.cnblogs.com/wllwqdeai/p/10291629.html

时间: 2024-10-10 08:49:18

字符串分割strtok_s的相关文章

【C++】字符串分割 strtok_s

char str[] = "now # is the time for all # good men to come to the # aid of their country"; //缓冲块首地址 char delims[] = "#";      //缓冲块中单词之间的分隔符 char *strToken = nullptr;              //指向将被处理的单词 char *next_token = nullptr;            //保存

strtok、strtok_s、strtok_r 字符串分割函数

1.strtok函数 函数原型:char * strtok (char *str, const char * delimiters); 参数:str,待分割的字符串(c-string):delimiters,分割符字符串. 使用方法:该函数用来将字符串分割成一个个片段.参数str指向欲分割的字符串,参数delimiters则为分割字符串中包含的所有字符.当strtok()在参数s的字符串中发现参数delimiters中包涵的分割字符时,则会将该字符改为\0 字符.在第一次调用时,strtok()

C++ 字符串分割

2017-06-26 21:47:06 这几天在做大数据的处理,需要处理几百万的数据.由于一直用的是c++,所以就直接用c++进行了编码. 不过后来经过学长的提醒发现其实字符串处理,尤其是处理csv文件(由逗号作为分割符)时,需要将各个部分分割开来,如果用Java或者Python进行处理的话会非常方便,比如Java就有split函数进行字符串的分割,不过我在查询资料之后发现c++中并没有现成的针对string的字符串分割函数.于是我自己写了一个split函数. 这个函数的声明是 void spl

C/C++ 字符串分割: strtok 与 strsep 函数说明

函数原型: char *strtok(char *s, const char *delim); char *strsep(char **s, const char *delim); 功能:strtok和strsep两个函数的功能都是用来分解字符串为一组字符串.s为要分解的字符串,delim为分隔符字符串. 返回值:从s开头开始的一个个子串,当没有分割的子串时返回NULL. 相同点:两者都会改变源字符串,想要避免,可以使用strdupa(由allocate函数实现)或strdup(由malloc函

Matlab实现字符串分割

Matlab实现字符串分割(split) Matlab的字符串处理没有C#强大,本身又没有提供OO特性,需要依赖别的手段完成这项任务. 我们在这里借助正则表达式函数regexp的split模式.一般语法: S = regexp(str, char, 'split') 其中str是待分割的字符串,char是作为分隔符的字符(可以使用正则表达式).分割出的结果存在S中. 以下面这样一串字符为例 Hello Nocturne Studio 首先去除首尾的多余空格: str = deblank(str)

strtok():“字符串分割”实用函数

最近一直纠结于一个十分简单的问题:如何将一个字符串按标志分割开来?提出这个问题的初衷是自己在处理一个将命令行字符串转换为argc,argv格式的问题. 尝试了很多种方法,最后觉得利用strtok()函数来实现是一个比较好的方法.首先进行strtok()函数的介绍. char *strtok(string, control);  --- Tokenize string with delimiter in control. --- 通过分割符控制将字符串切片化. Purpose: strtok co

php 字符串分割函数split

说明 array split    ( string $pattern   , string $string   [, int $limit  ] ) 本函数返回一个字符串数组,每个单元为   string 经区分大小写的正则表达式   pattern 作为边界分割出的子串.如果设定了   limit,则返回的数组最多包含   limit 个单元,而其中最后一个单元包含了   string 中剩余的所有部分.如果出错,则   split() 返回 FALSE. Example #1 split(

JavaScript基础 split(&quot;&quot;) 将字符串分割成字符数组

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ut

将中文字符串分割为数组 解决str_split中文乱码php

首先来介绍str_split()这个函数: 它的作用是将字符串分割为数组: 例如: $str='abcde';str_plite($str); 打印结果如下:Array(    [0] => a    [1] => b    [2] => c    [3] => d    [4] => e) 看似很好用的样子:但是作为中国程序员:不可避免的要和中文打交道: 这时候再用str_splite就会悲剧的发现乱码了::: 不要怕:preg_splite可以拯救这个问题: 当然是需要配