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