标题:为什么这个在C++中出错.在C中却没问题
只看楼主
可可哪里
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-5-18
 问题点数:0 回复次数:5 
为什么这个在C++中出错.在C中却没问题

#include<stdio.h>
#include<string.h>


void main()
{
char * temp;
char * tokenPtr;
char string[]="this is a sentence which 7 tokens";

tokenPtr=strtok(string," ");
temp=tokenPtr;

while(tokenPtr!=NULL)
{
tokenPtr=strtok(NULL," ");

if(strlen(temp)<strlen(tokenPtr)&&tokenPtr!=NULL)
temp=tokenPtr;

}
printf("the longest word is:%s\n",temp);
}

搜索更多相关主题的帖子: tokenPtr temp string NULL 
2006-05-18 19:50
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 
看起来语法上没有错啊 *tokenPtr!=NULL

2006-05-18 20:32
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
我还不在的strtok是什么意思呢?》

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-18 22:07
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
得分:0 
lz请在问类似问题的时候把错误信息贴出来,至少说下是报什么错
楼主应该把这行代码:if(strlen(temp)<strlen(tokenPtr)&&tokenPtr!=NULL)
改为if(tokenPtr!=NULL)
{
if(strlen(temp)<strlen(tokenPtr))
......
}
原因是计算顺序的问题,在c++中&&操作符是从左至右执行的,所以你的语句中先执行了strlen(temp)<strlen(tokenPtr),而来不及判断tokenPtr!=NULL

wfpb
,strtok的原型是
char *strtok( char *strToken, const char *strDelimit );
是在strToken中寻找下一个以strDelimit中的字符为分割点的字符的函数


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-05-19 09:43
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
哦,返回的是指向那个分割点字符的指针?理解了,谢谢了

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-19 09:47
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
得分:0 
以下是引用wfpb在2006-5-19 9:47:00的发言:
哦,返回的是指向那个分割点字符的指针?理解了,谢谢了

你还是理解有点错误,应该是返回的是下一个分割点和下下个分割点之间的字符的指针,例如下面字符串:
a dog,a pig
那么以" ,"(空格和逗号)为分隔符的话依次返回
a
dog
a
pig


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-05-19 10:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-65359-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.142866 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved