C语言strtok函数使用问题。
#include<stdio.h>#include<string.h>intmain(){chara[]="10";charb[]="asfdjodgfoiuyduogh...
#include <stdio.h>
#include <string.h>
int main()
{
char a[] = "10";
char b[] = "asfdjodgfoiuyduogh";
char *c = strtok(b,a);
printf("%s",c);
}输出的结果是 asfdjodgfoiuyduogh 为什么没有达到分割的效果!? 展开
#include <string.h>
int main()
{
char a[] = "10";
char b[] = "asfdjodgfoiuyduogh";
char *c = strtok(b,a);
printf("%s",c);
}输出的结果是 asfdjodgfoiuyduogh 为什么没有达到分割的效果!? 展开
3个回答
2015-12-13 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。如果要保持原字符串的完整,可以使用strchr和sscanf的组合等。
strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置
线程安全的函数叫strtok_r,ca。
运用strtok来判断ip或者mac的时候务必要先用其他的方法判断'.'或':'的个数,因为用strtok截断的话,比如:"192..168.0...8..."这个字符串,strtok只会截取四次,中间的...无论多少都会被当作一个key。
函数strtok保存string中标记后面的下一个字符的指针,并返回当前标记的指针。
后面再调用strtok时,第一个参数为NULL,继续将string标记化。NULL参数表示调用strtok继续从string中上次调用 strtok时保存的位置开始标记化。
如果调用strtok时已经没有标记,则strtok返回NULL。注意strtok修改输入字符串,因此,如果调用strtok之后还要在程序中使用这个字符串,则应复制这个字 符串。
strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置
线程安全的函数叫strtok_r,ca。
运用strtok来判断ip或者mac的时候务必要先用其他的方法判断'.'或':'的个数,因为用strtok截断的话,比如:"192..168.0...8..."这个字符串,strtok只会截取四次,中间的...无论多少都会被当作一个key。
函数strtok保存string中标记后面的下一个字符的指针,并返回当前标记的指针。
后面再调用strtok时,第一个参数为NULL,继续将string标记化。NULL参数表示调用strtok继续从string中上次调用 strtok时保存的位置开始标记化。
如果调用strtok时已经没有标记,则strtok返回NULL。注意strtok修改输入字符串,因此,如果调用strtok之后还要在程序中使用这个字符串,则应复制这个字 符串。
2013-07-18
展开全部
#include<stdio.h>
#include<string.h>
#include<malloc.h>//动态内存分配函数malloc和free的头文件
int main()
{
int i,s;
char *a,*p,*str[100];
a=(char*)malloc(sizeof(char)*100);//开辟一个最大字节长度为100的空间
scanf("%[^\n]",a);//将开辟的空间拿来做字符串,使用scanf无法输入空格后面的[^\n]过滤了换行符之后的字符,这样就没事了
getchar();//还需要吸收垃圾字符,这个不能没有否则会出现死循环
p=strtok(a," ");//第一次以空格符分割
for(s=0;p;s++)//当p为空时跳出
{
str[s]=p;//将分割的传给指针数组str,str相当于字符串数组
p=strtok(NULL," ");//接着在分割
}
printf("%s",str[0]);
for(i=1;i<s;i++)
printf(" %s",str[i]);
printf("\n");
free(a);//释放内存
return 0;
}
VC++6.0测试通过
#include<string.h>
#include<malloc.h>//动态内存分配函数malloc和free的头文件
int main()
{
int i,s;
char *a,*p,*str[100];
a=(char*)malloc(sizeof(char)*100);//开辟一个最大字节长度为100的空间
scanf("%[^\n]",a);//将开辟的空间拿来做字符串,使用scanf无法输入空格后面的[^\n]过滤了换行符之后的字符,这样就没事了
getchar();//还需要吸收垃圾字符,这个不能没有否则会出现死循环
p=strtok(a," ");//第一次以空格符分割
for(s=0;p;s++)//当p为空时跳出
{
str[s]=p;//将分割的传给指针数组str,str相当于字符串数组
p=strtok(NULL," ");//接着在分割
}
printf("%s",str[0]);
for(i=1;i<s;i++)
printf(" %s",str[i]);
printf("\n");
free(a);//释放内存
return 0;
}
VC++6.0测试通过
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#include<string.h>
#include<malloc.h>//动态内存分配函数malloc和free的头文件
int main()
{
int i,s;
char *a,*p,*str[100];
a=(char*)malloc(sizeof(char)*100);//开辟一个最大字节长度为100的空间
scanf("%[^\n]",a);//将开辟的空间拿来做字符串,使用scanf无法输入空格后面的[^\n]过滤了换行符之后的字符,这样就没事了
getchar();//还需要吸收垃圾字符,这个不能没有否则会出现死循环
p=strtok(a," ");//第一次以空格符分割
for(s=0;p;s++)//当p为空时跳出
#include<string.h>
#include<malloc.h>//动态内存分配函数malloc和free的头文件
int main()
{
int i,s;
char *a,*p,*str[100];
a=(char*)malloc(sizeof(char)*100);//开辟一个最大字节长度为100的空间
scanf("%[^\n]",a);//将开辟的空间拿来做字符串,使用scanf无法输入空格后面的[^\n]过滤了换行符之后的字符,这样就没事了
getchar();//还需要吸收垃圾字符,这个不能没有否则会出现死循环
p=strtok(a," ");//第一次以空格符分割
for(s=0;p;s++)//当p为空时跳出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询