免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5482 | 回复: 15
打印 上一主题 下一主题

[函数] 请教:关于strcmp()函数的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-23 08:57 |只看该作者 |倒序浏览
#vi gkm.c

#include <stdio.h>

int
main()
{
    FILE *fp;
    char ch;
    if((fp=fopen("a.txt","r+"))==NULL)
        {printf("error\n");
          exit(1);
         }

     ch=fgetc(fp);
     while(ch!=EOF)
     {
          putchar(ch);
          if(!(strcmp(ch,"|")))
               ch=fgetc(fp);
      }
      fclose(fp);
}



我用的是 sco unix 5.0.5
编译的时候不报错,运行的时候显示“memory fault - core dumped”
请高手指点一下,谢谢!(指针使用的问题?)

[ 本帖最后由 z_h_m 于 2005-12-23 10:19 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2005-12-23 09:04 |只看该作者
int strcmp(const char *s1, const char *s2);

论坛徽章:
0
3 [报告]
发表于 2005-12-23 09:26 |只看该作者
请楼上多指教,我的目的是文件a.txt里有“|”分隔符,用strcmp怎么判断?或者用其他的办法?

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
4 [报告]
发表于 2005-12-23 09:36 |只看该作者
那就不要用strcmp了。
直接写成这样:
if ( '|' == ch )
{}

论坛徽章:
0
5 [报告]
发表于 2005-12-23 09:49 |只看该作者
知道问题出在哪了,谢谢楼上,单引号和双引号?
strcmp(ch,'|')
strcmp(ch,"|")

论坛徽章:
0
6 [报告]
发表于 2005-12-23 10:14 |只看该作者
原帖由 z_h_m 于 2005-12-23 09:49 发表
知道问题出在哪了,谢谢楼上,单引号和双引号?
strcmp(ch,'|')
strcmp(ch,"|")


晕...
你要分清楚字符和字符串的区别,
字符(用''表示)实际上是一个数值类型,所以可以用==来比较,
而字符串(用""表示)一般是用char *来表示,存放的是字符串的首地址.

strcmp(const char *,const char *)只能接收字符指针作为参数...

论坛徽章:
0
7 [报告]
发表于 2005-12-23 10:23 |只看该作者
strcmp需要两个串,程序想怎么比都可以,但是必须类型匹配啊。
你的ch是字符。

论坛徽章:
0
8 [报告]
发表于 2005-12-23 10:50 |只看该作者
受益,多谢两位,呵呵,菜鸟的问题就比较多,那么以下代码对吗?

#include <stdio.h>

struct bxm_n{
       char bh;    //原来是 int bh;
       int hc;
       int km;
       char mc[20];
};

int
main()
{
    FILE *fp;
    struct bxm_n one;
    if((fp=fopen("a.txt","a+"))==NULL)
        {printf("error");
          exit(1);
         }

     while(!feof(fp))
     {
          fscanf(fp,"%[^|]|%[^|]|%[^|]|%[^|]%s",one.bh,one.hc,one.km,one.mc);
          if(strcmp("2",one.bh)==0)
          printf("%s %s %s %s",one.bh,one.hc,one.km,one.mc);
      }
      fclose(fp);
}

[ 本帖最后由 z_h_m 于 2005-12-23 11:33 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2005-12-23 10:56 |只看该作者
if(strcmp("2",one.bh)==0)
和以前不是一样吗,one.bh这回是int了

论坛徽章:
0
10 [报告]
发表于 2005-12-23 11:32 |只看该作者
晕啊.......

这样
char a[]="2";
...
if((strcmp(one.bh,a))==0)
...
不行啊!

这样
char *p;
char a=2;
p=&a;
....
if((strcmp(one.bh,p))==0)
...

也不成。

怎么做才是正确的啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP