关于strtok()函数的小小的理解

本文介绍了如何使用C语言中的strtok函数来分割字符串,并通过示例代码展示了不同情况下strtok函数的行为变化。同时,文章还探讨了在循环中修改字符串内容的影响。

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

函数原型:

char *strtok(char *str, const char *delim)         分解字符串 str 为一组字符串,delim 为分隔符。

用法:

#include <string.h>
#include <stdio.h>
int main()
{
   const char str[80] = "This is - www.w3cschool.cn - website";
   const char s[2] = "-";
   char *token;
   
   /* 获取第一个子字符串 */
   token = strtok(str, s);
   
   /* 继续获取其他的子字符串 */
   while( token != NULL ) 
   {
      printf( " %s\n", token );
    
      token = strtok(NULL, s);
   }
   
   return(0);
}

在第一次调用函数的时候第一个参数是即将被分割的字符串,第二个参数是分隔符。

返回第一个子字符串的指针(地址)。

接着设置循环,这时第一个参数为NULL(表示这次strtok函数调用将从上一次strtok函数调用保存的位置开始,继续对字符串分割——参照《C语言大学教程第八版》)

-------------------------------动动手脚----------------------------------

#include<stdio.h>
#include<string.h>
#define SIZE 100
int main()
{
	char Word[SIZE];
	gets(Word);

	char* pWord=strtok(Word," ");
	while(pWord!=NULL)
	{
		*(pWord+1)='0';// 1
		printf("%s\n",pWord);
                *(pWord+1)='0';// 2
		pWord=strtok(NULL," ");
                *(pWord+1)='0';// 3
	}

	return 0;
}

这是一个分割字符的程序。我在while循环里加了一行:
*(pWord+1)='0';

当我加在标号1位置时,pWord指针应该指向第一个子字符串,所以果不其然输出的结果每一个子字符的第二个字符都被换成0。

当我加在标号2位置时,pWord指针还应该指向第一个子字符串,由于第一个子字符串已经被打印,接着pWord又被赋成第二个子字符串,所以最终打出来的结果并没有改变。

当我加在标号3位置时,该操作从第二个子字符串开始执行,当执行到最后一个子字符串时(最后一个循环时),执行到该

*(pWord+1)='0';操作时,pWord=NULL,所以程序会报错:找不到地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值