#include <stdio.h>
#include <string.h>
void split(char **arr, char *str, const char *del){
char *token;
token = strtok(str, del);
while(token != NULL)
{
*arr++ = token;
token = strtok(NULL, del);
}
}
int main(){
char str[] = “10,20,30″; //如果写成 *str=”10,20,30″ 报错
char *arr[3];
const char *del = “,”;
int i=0;
split(arr, str, del);
while(i<3)
printf(“%s\n”, *(arr+i++));
}
#include <stdio.h>#include <string.h>
void split(char **arr, char *str, const char *del){ char *token; token = strtok(str, del); while(token != NULL) { *arr++ = token; token = strtok(NULL, del); }}
int main(){ char str[] = “10,20,30″; char *arr[3]; const char *del = “,”; int i=0; split(arr, str, del); while(i<3) printf(“%s\n”, *(arr+i++));
}
引用这里的文章
http://blog.csdn.net/tsd3698/archive/2007/06/06/1640077.aspx
此函数用于词法单元分析:
char *strtok(char *str1, const char *str2);
返回指向str1中的下一个词法单元的指针,str2是词法单元的间隔符的集合。
注意str1不能用字符串常量,必须使用字符串数组,这是该函数不够完善的一个地方。
示例:
#include <string.h>
#include <stdio.h>
char string[] = “A string\tof ,,tokens\nand some more tokens”; //如果用char *string=”A string\tof ,,tokens\nand some more tokens”,则被分析的字符串是一个字符常量
char seps[] = ” ,\t\n”;
char *token;
int main( void )
{
printf( “Tokens:\n” );
// Establish string and get the first token:
token = strtok( string, seps );
while( token != NULL )
{
// While there are tokens in “string”
printf( ” %s\n”, token );
// Get next token:
token = strtok( NULL, seps );
}
}
原因在于,执行此函数时,它在每个token的后面添加了一个NULL字符,改变了原有的字符串,而常量字符串是不允许被修改的。
分享到:
相关推荐
为了解决这个问题,你可以使用`strtok_r`函数,这也是压缩包中的`strtok_r2`文件可能涉及的内容。 - **修改原字符串**:`strtok`在找到分隔符时会将其替换为终止符`\0`,这意味着它会修改原始字符串。 - **空格...
1. **数组大小问题**:上述代码中,数组 `data` 的大小固定为5,这可能会导致内存溢出或其他问题。实际应用中,建议根据实际需求动态分配内存,或者使用更灵活的数据结构(如 `vector`)来存储分割后的子串。 2. **...
此外,strtok()函数在处理包含中文的字符串时容易出现乱码问题,这是因为strtok()通常用于处理单字节字符(如英文等),而中文字符通常涉及多个字节,所以使用strtok()进行中文字符串的分割并不合适。 在实际应用中...
标记解析(`Tokenizing`)是最简单也是最常见的解析问题,也就是根据分隔符把一个字符串分割为几个部分。这个定义覆盖了所有这种类型的任务。根据空白分隔符(例如`" \t\n\r"`之一)分割单词。假设有个像`"/usr/...
为了解决这个问题,C++标准库提供了线程安全的版本`strtok_r()`,这个版本的函数需要额外提供两个参数来保存状态信息。 2. 当使用`strtok()`处理IP地址或MAC地址等格式的字符串时,需要注意不要仅依赖`strtok()`来...
下面是一段典型的使用 `strtok` 进行字符串分割的例子: ```c #include #include int main() { char str[] = "-This,asamplestring."; char *pch; printf("Splitting string \"%s\" into tokens:\n", str);...
我们在编程的时候经常会碰到字符串分割的问题,这里总结下,也方便我们以后查询使用。 一、用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串。 参数...
- **问题15**: 字符串转IP地址,将字符串按点分隔,逐段转换为整数。 - **问题16**: 实现`split_string`,可以遍历字符串,遇到分隔符时添加子字符串到结果数组。 - **问题17**: 反转单词内部顺序,使用两个指针...
为了解决`strtok`的这些问题,C标准库提供了一个可重入版本`strtok_r`,它允许在多线程环境下安全地使用,并且可以方便地处理连续的分隔符操作。`strtok_r`函数的原型如下: ```c char *strtok_r(char *str, ...
这段代码首先使用`strtok()`函数将字符串按空格分割成单词,然后在循环中比较每个单词的长度。如果当前单词长度大于已知的最长长度,就更新最长长度和起始位置。最后,打印出最长的单词及其长度。 需要注意的是,`...
7. **计算单词问题.txt**:可能涉及到字符串处理,比如统计一段文本中单词的数量。C语言中处理字符串需要用到字符数组和字符串函数,如strlen、strcpy和strtok等。 8. **分解质因数.txt**:这可能是一个算法题,...
在数学问题中,求解众数是一项常见的任务,特别是在统计分析和数据挖掘领域。本题目的目标是编写一个C语言程序来解决此类问题。 首先,我们需要理解C语言的基础知识。C语言是一种强大的、低级的编程语言,它提供了...
解决这类问题需要扎实的C语言基础,包括变量、数据类型、控制结构、函数、字符串处理和错误处理等知识。此外,理解二进制和进位的概念也非常重要,因为这是进行ASCII码计算和26进制转换的基础。 通过解决这个编程题...
3. 使用`strtok()`或`sscanf()`解析`#include`后的文件名。 4. 使用`fopen()`和`fprintf()`来处理新的文件内容。 5. 确保处理嵌套的`#include`指令,防止无限循环,可以使用一个跟踪已处理文件的集合。 6. 考虑处理...
值得注意的是,实际应用中的协议解析可能更复杂,需要考虑错误处理、校验和、编码解码等问题。例如,数据长度字段可能需要校验,数据体可能需要解码(如ASCII转二进制),且协议可能包含多层嵌套结构。此外,对于大...
- 错误处理和调试:使用`error_reporting()`设置错误报告级别,以及`ini_set('display_errors', 1)`开启错误显示。 - session和cookie的管理:理解它们的区别,合理使用`session_start()`和`setcookie()`。 - ...
总结来说,解决这个问题的关键在于理解和运用C语言中的字符串处理函数,包括`strtok()`用于分割字符串,`strlen()`用于计算字符串长度,以及如何在遍历过程中动态更新最大值。这个过程对于理解和提升C语言编程技能...
这个库可能包含了一套完整的错误处理机制,提供统一的错误码、错误消息,便于调试和定位问题。 综上所述,这个压缩包提供的C语言工具库涵盖了编程中的多个核心领域,为开发者提供了一站式的解决方案,大大提升了...
### 字符串切割子字符串 在C++编程中,对字符串进行切割是非常常见的操作之一,尤其是在处理...通过以上分析可以看出,`strtok`函数虽然简单易用,但在实际应用中还需注意一些细节问题,以确保程序的安全性和稳定性。