C语言strtok函数使用问题。
发布网友
发布时间:2022-04-28 12:57
我来回答
共3个回答
热心网友
时间:2023-09-05 04:30
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之后还要在程序中使用这个字符串,则应复制这个字 符串。
热心网友
时间:2023-09-05 04:30
#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测试通过
热心网友
时间:2023-09-05 04:30
#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为空时跳出