strtok
Posted ^_^|
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了strtok相关的知识,希望对你有一定的参考价值。
一、strtok的函数原型
#include <string.h>
char *strtok(char *str, const char *delim);
• 功能
–字符串 str 由多个单词构成
–单词之间由分割符 delim 隔开
–strtok 将字符串切分为多个单词
二、功能
• 输入字符串
–“abc:123:xyz”
• 分隔符
–“:”
• 分割成多个单词
–“abc”
–“123”
–“xyz”
三、使用
char string[] = "abc:123:xyz";
char *word;
word = strtok(string,":");
while (word != NULL)
{
printf("%s\\n", word);
word = strtok(NULL,":");
}
四、strtok 的错误用法
strtok 的错误用法
char *string = "abc:123:xyz";
char *word;
word = strtok(string,":");
while (word != NULL) {
printf("%s\\n", word);
word = strtok(NULL,":");
}
strtok 的错误用法
• 程序运行
Segmentation Fault
• 非法访问内存
– char *string = "abc:123:xyz";
– word = strtok(string,":");
strtok 的错误用法
• C 语言中字符串是只读的常量
• 修改字符串常量,会引发 Segmentataion Fault
int main()
{
char *p = “abc”;
p[0] = 'x';
}
strtok 的错误用法
• strtok 运行时会修改输入字符串
–输入字符串
•"abc:123:xyz"
–分割
• 将分隔符替换为 \\0 –结果
•"abc\\0123\\0xyz"
• 错误
–char *string = "abc:123:xyz";
–strtok(string,":");
• 正确
–char string[] = "abc:123:xyz";
–strtok(string,":");
• 正确
–char *string = "abc:123:xyz";
–char buffer[100];
–strcpy(buffer, string);
–strtok(buffer,":")
strtok_s内部保存切分时的上下文,以应对连续调用分解相同源字符串。
如果在子进程中使用strtok,可能会使父进程的strtok出问题,此时应当使用strtok_r
以上是关于strtok的主要内容,如果未能解决你的问题,请参考以下文章