关于strsok函数

#include
#include
#include
#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;
}

运行结果:

关于strsok函数_第1张图片

 

 

 

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

关于strtok的参数

1、char * str

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

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

//将需要分割的字符串拷贝出来,使用可以改变内存的变量作为入参关于strsok函数_第2张图片

关于strsok函数_第3张图片

 

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 = ",";  */          //正确,但是实际上跟上面这种表达,意义是一样的。

 

你可能感兴趣的:(C语言基础--基础函数)