#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 = ","; */ //正確,但是實際上跟上面這種表達,意義是一樣的。