关于strsok函数

本文详细介绍了C语言中的strtok函数,特别是关于其参数的使用。错误示例包括使用单个字符和不正确的指针类型。正确的做法包括使用字符数组和不可修改的字符指针。还讨论了动态分配内存给分隔符的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX_LEN 10
int main(void)
{
	char *str;
	str = malloc(MAX_LEN);
	memset(str, 0, MAX_LEN); //定义一个字符指针,分配空间和地址,初始化内存空间

	while (scanf("%s", str) != EOF) {
		char*p;
		p = strtok(str, ",");//截取字符串str,分隔符是","

		int count = 1;
		while (p != NULL) {
			printf("%d----p:%s    str:%s\n", count, p, str);
			p = strtok(NULL, ",");//截取字符串str,分隔符是","
			count++;
		}
	}	
	return 0;
}

运行结果:

 

 

 

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

关于strtok的参数

1、char * str

从上面的例子可以看出,strtok会改变str指向的内存空间。

所以该函数有个坑就是不能直接使用const char *作为参数。

//将需要分割的字符串拷贝出来,使用可以改变内存的变量作为入参

 

2、const char * delimiters

错误:

                             //char delim = ";";  //错误,定义char类型应该用单引号
                             //char delim = ';';  //错误,strtok第2个参数是const char *,是指针,不是字符

正确:

1、char delim[2] = ",";  正确,是char *类型

2、char *delim = ",";   //正确,可以运行通过,但是后续不能通过指针或者数组等任何形式修改delim指向的字符

  3、

/*    char *delim;
    delim = malloc(2);
    delim = ",";  */          //正确,但是实际上跟上面这种表达,意义是一样的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值