标签:子串 col 多次 要求 cat c语言 指针 string 不可
#include <stdio.h> #include <stdlib.h> #include <string.h> /* 字符串切割函数 */ /* 知识补充: 1. 函数原型: char *strtok(char *str, const char *delim); char *strsep(char **stringp, const char *delim); 2. 功能: strtok和strsep两个函数的功能都是用来分解字符串为一组字符串。str为要分解的字符串,delim为分隔符字符串。 3. 参数说明: str(stringp)要求不可以是 const char *,因为 strtok 或者 strsep 都会修改 str 的值(修改指针的值) delim 可以多个字符的集合,strtok(strsep)会按单个字符切割子串 4. 返回值: 从str开头开始的第一个子串,当没有分割的子串时返回NULL。 5. 相同点: 两者都会改变源字符串,想要避免,可以使用strdupa(由allocate函数实现)或strdup(由malloc函数实现)。 6. 不同点: a. strtok函数第一次调用时会把s字符串中所有在delim中出现的字符替换为NULL。然后通过依次调用strtok(NULL, delim)得到各部分子串。 b. strsep函数第一次调用时会把s字符串中所有在delim中出现的字符替换为‘\0‘。然后通过依次调用strtok(stringp, delim)得到各部分子串。 c. strsep在切割字符串的过程中,可能多次返回空字符串(‘\0‘),但是 strtok 只会在结束时才返回 NULL d. strtok 内部记录上次调用字符串的位置,所以不支持多线程,可重入版本为strtok_r e. strsep支持多线程 */ void test() { char p[] = "hello this world . the world is good ."; char *pcIndex = p; char *token = NULL; while (token = strsep(&buf, ". "), token) { //*token 可能会等于 ‘\0‘ if (*token) { printf("--[%s]---[%p]---buf[%p]--\n", token, token, buf); } } } int main() { test(); return 0; }
标签:子串 col 多次 要求 cat c语言 指针 string 不可
原文地址:https://www.cnblogs.com/zhanggaofeng/p/11605149.html