标题:if (found == strstr(catalog, ","))的使用问题——大神求助!
只看楼主
XiaoXiao_Ren
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
威 望:1
帖 子:80
专家分:198
注 册:2013-7-17
结帖率:100%
已结贴  问题点数:20 回复次数:5 
if (found == strstr(catalog, ","))的使用问题——大神求助!
请教大神:

        程序代码中
        char *found;
char *found 被定义之后,found是否已被分配了地址空间,
found无论什么时候都不会等于0,这样理解正确吗?


如果这样理解正确那么请问:
if (found == strstr(catalog, ","))的使用进入不到if里面吧。
【catalog是字符数组名,里面存放如“mycd,213,zhoujielun”】
【strstr是在catalog中查找“,”这个字符串在catalog中第一次出现的位置并返回,没找到返回null】
但在if中做判断的时候,为什么每次都可以成立。
搜索更多相关主题的帖子: zhoujielun 字符串 null 空间 
2013-08-18 22:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
你不会查一查strstr()函数的使用手册再问这个问题么?

授人以渔,不授人以鱼。
2013-08-18 23:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:5 
strstr()函数,是从一个字符串中搜寻另一个字符串,如果被搜寻的字符串存在,就返回这个被搜寻字符串的入口指针,如果找不到,返回空指针。因此,接收指针found是不用分配空间的,它被函数的返回值赋值,指向被找到的字符串,如果字符串找不到,found将是空指针,但未必是零,你最好跟空指针比较,不是跟零比较,尽管绝大多数情况下空指针是零,但未必总如此,不过零必定是空指针。你最好仔细琢磨一下我这里后面的话,将来在书上会见到类似的话,就会明白人家说什么了,这也是C++新辟nullptr概念的原因,而不是C的NULL。

[ 本帖最后由 TonyDeng 于 2013-8-18 23:55 编辑 ]

授人以渔,不授人以鱼。
2013-08-18 23:54
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
得分:10 
回复 楼主 XiaoXiao_Ren
对于你这个问题,有点蹊跷,最好是把代码多贴出来点

可能是偶然,但是一般的偶然都能用必然的结论来结束

按照你现在说的看书去没错,但是即使你能保证你的问题没出现其他地方,也应该让我们看一下上下文

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-19 09:45
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:5 
if (found == strstr(catalog, ","))

我估计作者的本意是:if (found = strstr(catalog, ",")) 一个等号不是两个?

我行我乐
我的博客:
http://blog.yuccn. net
2013-08-19 10:06
XiaoXiao_Ren
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
威 望:1
帖 子:80
专家分:198
注 册:2013-7-17
得分:0 
以下是相应的代码:问题解决了,确实是因为我的判断语句之后多了一个分号,所以每次if判断都进入;另外我觉得这里应该是用赋值=语句才对,可能是作者疏忽吧。。
                  谢谢大家帮忙!

void find_cd()
{
        char match[MAX_STRING], entry[MAX_ENTRY];
        FILE *titles_fp;
        int count = 0;
        char *found, *title, *catalog;

        mvprintw(Q_LINE, 0, "Enter a string to search for in CD titles: ");
        get_string(match);

        titles_fp = fopen(title_file, "r");
        if (titles_fp) {
                while (fgets(entry, MAX_ENTRY, titles_fp)) {
                        catalog = entry;
                        if (found == strstr(catalog, ",")); {
                                *found = '\0';
                                title = found + 1;

                                if (found == strstr(title, ",")) {
                                        *found = '\0';
                                        if (found == strstr(title, match)) {
                                                count++;
                                                strcpy(current_cd, title);
                                                strcpy(current_cat, catalog);
                                        }
                                }
                        }
                }
                fclose(titles_fp);
        }
        if (count != 1) {
                if (count == 0) {
                        mvprintw(ERROR_LINE, 0, "Sorry, no matching CD found. ");
                }
                if (count > 1) {
                        mvprintw(ERROR_LINE, 0, "Sorry, match is ambiguous: %d CDs found. ",count);
                }
                current_cd[0] = '\0';
                get_return();
        }
}

否极泰来
2013-08-19 13:18



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




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

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