C语言strtok()函数详解

函数原型

char *strtok(char *str, char const *sep);

第一次调用strtok函数时,这个函数将忽略间距分隔符并返回指向在str字符串找到的第一个符号的指针,丢掉分隔符sep,添加NULL字符结尾(可以理解为用NULL替换了sep).

通过调用一系列的strtok函数,更多的符号将从str字符串中分离出来.每次调用strtok函数时,都将通过在找到的符号后插入一个NULL字符(丢掉sep)来修改str字符串.

为了读取str中的下一个符号,调用strtok函数时str参数为NULL,这会引发strtok函数在已修改过的str字符串查找下一个符号.

strtok函数的常用方法

p = strtok(buf, ",");  
while( p!=NULL ){  
    p = strtok(NULL, ",");  
    if( p==NULL ){  
        break;  
    } 
}  

例子分析

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

#define _CRT_SECURE_NO_DEPRECATE;
#pragma warning(disable:4996);
#define _CRT_SECURE_NO_WARNINGS;
void print_tokens(char *line, char const *sep);

int main()
{
	char *s = "[123456,abced,bjhu88a,ffvjbjvy,jjbjg868bj,799nbgu]";
	char *start = NULL;
	char *end = NULL;
	char dest[100];
	char dest2[100];
	char *ss;

	start = strchr(s, (int)'[');         // 找到字符'['的位置
	end = strchr(s, (int)']');           // 找到字符']'的位置

	memcpy(dest, start + 1, end - start);// 将字符串s中'['之后的所有内容都copy出来包括字符']',这是为了之后的分割字符串使用的
	dest[end - start - 1] = '\0';        // 将字符串dest的最后一个字符']'改成'\0',如果最后一个字符不是'\0'的话,那么在该字符串的最后一位是乱码的
	memcpy(dest2, start + 1, end - start);// 将字符串s中'['之后的所有内容都copy出来包括字符']',这是为了之后的分割字符串使用的
	dest2[end - start - 1] = '\0';


	printf("%s\n", dest);

	ss = strtok(dest, ",");              // 第一次调用strtok函数,第一个参数是将要分割的字符串,第二个参数是分割的字符','

	while (ss != NULL) {
		printf("%s\n", ss);
		ss = strtok(NULL, ",");          // 再次调用strtok函数
	}

	print_tokens(dest2,",");

	getchar();
	return 0;
}


void print_tokens(char *line, char const *sep) {
	//static char whitespace[] = "\t\f\r\v\n";
	char *token;

	for (token = strtok(line, sep); token != NULL; token = strtok(NULL, sep)) {
		printf("Next token is %s\n", token);

	}
}

这里写了两种函数的用法,其实没什么区别。

结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值