1、
Int main(void)
{
char *tmp = NULL;
Char *remotebuf=”0\r\n”;
tmp = strtok(remotebuf, DELIM); 执行出现段错误。
}
2、
Int main(void)
{
char *tmp = NULL;
char *remotebuf = NULL;
remotebuf = (char *)malloc(10);
strcpy(remotebuf, "0\r\n");
tmp = strtok(remotebuf, DELIM); 执行则没有问题。
}
3、
Int main(void)
{
Char *remotebuf=”0\r\n”;
Printf(“%s\n”,remotebuf); 执行没有问题
}
vi strtok
#include<string.h>
#include<stdio.h>
int main(void)
{
char *p,coname[20]=":name:name1",*colon=":",*name;
printf("%s\n",coname);
p=strtok(coname,colon);
printf("%s\n",p);
printf("%s\n",coname);
name=strtok(NULL,colon);
printf("%s\n",name);
return 0;
}
[email protected]:~/xcj# gcc -o strtok strtok.c
[email protected]:~/xcj# ./strtok
:name:name1
name
:name
name1
当strtok()在参数s的字符串中发现参数delim中包涵的分割字符时,则会将该字符改为\0 字符。因此第一次和第二次打印coname结果不同,数组默认结尾是\0。。
因此使用char *strtok(char s[], const char *delim);函数之前,要先把s拷贝出来一份。