char * strtok_r(char *ptr, const char *sep, char **end)
{
if(!ptr)
/* we got NULL input so then we get our last position instead */
ptr = *end;
/* pass all letters that are including in the separator string */
while(*ptr && strchr(sep, *ptr))
++ptr;
if(*ptr)
{
/* so this is where the next piece of string starts */
char *start = ptr;
/* set the end pointer to the first byte after the start */
*end = start + 1;
/* scan through the string to find where it ends, it ends on a
null byte or a character that exists in the separator string */
while(**end && !strchr(sep, **end))
++*end;
if(**end)
{
/* the end is not a null byte */
**end = '\0'; /* zero terminate it! */
++*end; /* advance the last pointer to beyond the null byte */
}
return start; /* return the position where the string starts */
}
/* we ended up on a null byte, there are no more strings to find! */
return NULL;
}
----------------------------------------------------
使用方法
----------------------------------------------------
int main(int argv,char** argc)
{
char * str;
str = (char *)malloc(20);
memset(str,20,0);
sprintf( str, "123%s456%s789%s","oo","oo","oo");
int length = strlen(str);
char * tok=NULL;
char *myStrBuf=NULL;
int idx = 0;
while (1)
{
if (!idx)
tok = strtok_r(str,"oo",&myStrBuf);
else
tok = strtok_r(NULL,"oo",&myStrBuf);
if (tok)
{
printf("%s \n ",tok );
idx++;
}
else
{
printf("NULL\n\n");
break;
}
}
if (myStrBuf)
{
//printf("%d\n",(int)(myStrBuf));
free(str);
}
system("pause");
}
分享到:
相关推荐
在C语言中,`strtok`函数用于分割字符串,但它存在一些限制,特别是在处理多层或嵌套的分隔符时。`strtok_r`函数是`strtok`的一个可重入版本,解决了`strtok`的弱点,更适用于复杂字符串处理。 1. `strtok`介绍: `...
本文将深入探讨如何使用C语言中的`strtok`函数进行字符分割,以及它的一些限制和替代方案。 1. `strtok`函数介绍: `strtok`函数是C库中用于字符串分割的一个函数,它可以根据指定的分隔符将一个字符串切割成多个...
`strtok`和`strtok_r`是C语言中处理字符串的强大工具,可以帮助我们方便地分割字符串。理解它们的工作原理和正确使用方式对于C语言编程至关重要。通过实践和练习,你将能够熟练掌握这些函数,从而更有效地处理字符串...
在深入探讨`strtok`函数的实现原理之前,我们首先需要了解`strtok`的基本功能。...在实际开发中,正确理解和使用`strtok_r`可以帮助开发者更轻松地处理复杂的字符串分割任务,尤其是在多线程环境中。
一、用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串。 参数说明:str为要分解的字符串,delim为分隔符字符串。 返回值:从str开头开始的一个个被...
为了在多线程程序中安全地分割字符串,可以使用线程安全版本的`strtok_r`函数,其函数原型如下: ```c char *strtok_r(char *restrict str, const char *restrict delim, char **restrict saveptr); ``` `strtok_r...
本示例“自定义协议解析demo”是关于如何使用C语言来解析非标准的通信协议,其中核心工具是`strtok_r`函数,用于高效地分割字符串。 首先,我们了解什么是自定义协议。在计算机通信中,协议定义了数据传输的格式和...
本文将深入探讨"字符数组分割"这一主题,结合C语言实验报告中的内容进行讲解。 字符数组,简而言之,就是一组连续的内存空间,用于存储字符。在C语言中,我们通常使用char类型的数组来实现字符数组。字符数组可以...
每次调用`strtok_r`都会返回一个指向当前分割出的字符串的指针,并更新外部存储空间以记录上一次分割的位置。 3. **内层循环**:对于每一个由逗号分割出的部分,再次使用`strtok_r`以空格为分隔符进行二次分割。 4...
一、用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串。 参数说明:str为要分解的字符串,delim为分隔符字符串。 返回值:从str开头开始的一个个被...
这个例子从文本文件ad9361.txt一行一行读取数据,通过spi设置寄存器值。支持命令读写:spidev_test -r F1 -w A0,-r参数表示寄存器地址,-w表示要写入的值,均为16进制(不要加0x开头)
在以下示例中,我们首先读取一行,然后使用`strtok_r()`按逗号分割字符串,分别获取姓名、年龄和生日: ```c #include #include // 省略trim()函数定义... int main() { FILE *fp = fopen("test.csv", "r"); ...
在C语言中,可以使用`strtok_r`函数来分割字符串,将输入的命令行分解为命令本身和参数。例如,如果用户输入`ls -l /home`,`strtok_r`会将`ls`识别为命令,`-l`和`/home`作为参数。处理时需注意保存未处理的剩余...
C++中的`strtok()`函数是一个用于字符串分割的实用工具,它允许我们将一个大的字符串分解成多个由特定分隔符分隔的子字符串。下面是对`strtok()`函数的详细解释和使用示例。 **函数原型:** ```cpp char *strtok...
- `delim`: 分隔符字符串,可以包含多个字符,`strtok()`会从中寻找作为分割依据的字符。 下面是一个简单的使用`strtok()`的例子,展示了如何根据空格分割字符串: ```c #include #include int main() { char ...
本文将深入探讨C语言中用于字符串分割的函数`strtok()`,并展示如何有效地使用它来解析配置文件和处理其他字符串操作。 `strtok()`函数是C标准库中的一个功能强大的字符串处理函数,用于将一个字符串按照指定的分隔...
根据空白分隔符(例如`" \t\n\r"`之一)分割单词。假设有个像`"/usr/include:/usr/local/include:."`这样的路径,在冒号处将其分开,形成单独的目录。根据一个简单的换行分隔符`"\n"`把一个字符串分割为不同的行。...
这段代码首先通过`strtok_r`函数将IP地址分割成四个部分(八位字),然后使用`atoi`将每个部分转换为整数。最后,通过位移操作将这四个八位字组合成一个32位整数。`main`函数展示了如何使用`ipstr2n`函数,并打印出...