關於strsok函數

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章