strtok()函数并不像你想的那样可以一次切割字串。需要多次循环,第二次时需要用 p = strtok(NULL, " "); 这样的 形式。
麻城网站建设公司成都创新互联公司,麻城网站设计制作,有大型网站制作公司丰富经验。已为麻城1000+提供企业网站建设服务。企业网站搭建\外贸营销网站建设要多少钱,请找那个售后服务好的麻城做网站的公司定做!
void main()
{ char test1[] = "Hello C World";
char *p;
p = strtok(test1, " ");
while(p)
{
printf("%s\n", p);
p = strtok(NULL, " ");
}
return 0;
}
运行结果:
Hello
C
World
直接的问题出在这句:
strcpy(str,s2);
strtok返回的指针,指向是str中相对位置;你s2之后,把s2再拷贝会str,这时的str变成了(A,C),而前面的s1指向的是str的相对位置,因此s1的指向,也从原来的(A,B)变成了(A,C),因此后面的结果也变了。
你起码应该引入新变量,char str2[]; 然后
strcpy(str2,s2);
又:strtok会破坏原来的字符串;strcpy不要用在“源”和“目的”重叠的地方(你例子中str和s2就重叠了);后面的strcpy(v1,S5),应该注意检测s5是否为NULL,否则容易出问题;同理strcpy(v2, s6)亦然。
#include string.h char *strtok( char *str1, const char *str2 ); 功能:函数返回字符串str1中紧接“标记”的部分的指针, 字符串str2是作为标记的分隔符。如果分隔标记没有找到,函数返回NULL。为了将字符串转换成标记,第一次调用str1 指向作为标记的分隔符。之后所以的调用str1 都应为NULL。
例如:
char str[] = "now # is the time for all # good men to come to the # aid of their country"; char delims[] = "#"; char *result = NULL; result = strtok( str, delims ); while( result != NULL ) { printf( "result is \"%s\"\n", result ); result = strtok( NULL, delims ); } 以上代码的运行结果是:
result is "now " result is " is the time for all " result is " good men to come to the " result is " aid of their country" 相关主题:
一般来说,条件关键词(if
else
else
if
for
while)只能作用于
紧随其后的
第一句
代码。
{
}的作用,你可以这么理解:是把‘被
括起来
的所有代码’
当成
‘一句代码’
送给关键词来处理。
注意:被括起来的可以是多句,当然也可以是一句哦。
if(a
==
b)
printf(
"a
==
b");
printf(
"a
!
a
!b
");
这个时候
第二个
printf
对
if
来说不是紧随的第一句所以不受if
限制。一定会输出。
if(a
==
b)
{
printf(
"a
==
b");
printf(
"a
!
a
!b
");
}
这个时候,整个大括号里的(两句
printf)就是
紧随
if
的第一句代码了。