免费注册 查看新帖 |

Chinaunix

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

一段错误代码:从文件中读取内容,然后和另一个字符串相比较。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-27 23:42 |只看该作者 |倒序浏览
char status[10]="";
if((fd=open("/home/test",O_RDONLY))!=-1)
{
        read(fd,status,10);
        status[9]=0;
        close(fd);
                if(status == "test1"
        {
                          cout<<"test1"<<endl;
                }else   if(status == "test2"
        {
                          cout<<"test2"<<endl;
                }
}


这段代码错在哪里了?不能这么比较字符串吧?请教

论坛徽章:
0
2 [报告]
发表于 2003-03-27 23:54 |只看该作者

一段错误代码:从文件中读取内容,然后和另一个字符串相比较。

原帖由 "testtt" 发表:
close(fd);
                if(status == "test1"
        {
                          cout<<"test1"<<endl;
                }else   if(status == "test2"
        {
                          cout&amp;l..........

不能。比较字符串要用字符串比较函数:int strcmp(char *str1,char * str2),
如果返回值为0,则相等;否则不相等。
故你的条件处可改为:
if(!(status,"test1")

论坛徽章:
0
3 [报告]
发表于 2003-03-27 23:59 |只看该作者

一段错误代码:从文件中读取内容,然后和另一个字符串相比较。

谢谢

/home/test 文件内容是test1
为什么用以上代码
if((fd=open("/home/test",O_RDONLY))!=-1)
{
read(fd,status,10);
status[9]=0;
close(fd);
取出该文件内容之后,用
cout<<status<<endl;
打印到屏幕上的字符串“test1”下面还多了一个空行?请教

论坛徽章:
0
4 [报告]
发表于 2003-03-28 00:05 |只看该作者

一段错误代码:从文件中读取内容,然后和另一个字符串相比较。

我试着用
cout<<status<<endl;
cout<<sizeof(status)<<endl;
打印内容如下:
test1

10
为什么多了空行,为什么大小是10?

论坛徽章:
0
5 [报告]
发表于 2003-03-28 00:34 |只看该作者

一段错误代码:从文件中读取内容,然后和另一个字符串相比较。

10是因为status[9]=0;//这里是错的,你根本不知道你的文件的长度,怎么可以设置到此结束呢?
你改成这样试试
int fd,n;
char status[10]="";
if((fd=open("/home/test",O_RDONLY))!=-1)
{
n=read(fd,status,10); //n是实际读到的字节数
status[n]=0;
close(fd);
if(!strcmp(status,"test1" )
{
cout<<"test1"<<endl;
}else if(!strcmp(status,"test2" )
{
cout<<"test2"<<endl;
}
cout<<"n="<<strlen(status)<<endl;//看是不是与你的文件长度相符
}

论坛徽章:
0
6 [报告]
发表于 2003-03-28 02:45 |只看该作者

一段错误代码:从文件中读取内容,然后和另一个字符串相比较。

还是不行
还是
test1

10

论坛徽章:
0
7 [报告]
发表于 2003-03-28 09:01 |只看该作者

一段错误代码:从文件中读取内容,然后和另一个字符串相比较。

原帖由 "testtt" 发表:
还是不行
还是
test1

10

呵呵,sizeof(status)测出的不是文件的长度,而是你的数组结构的长度,status[10]测出来当然是10,你不信改为status[12],测出来肯定是12。测读到的文件长度应该用strlen(status).下面是我的实验及结果。我是在unix下测的,所以程序改为用c.
--home/test文件内容:
test1

--程序
  1. #include<stdio.h>;
  2. #include<unistd.h>;
  3. #include<sys/types.h>;
  4. #include<sys/stat.h>;
  5. #include<fcntl.h>;
  6. int main()
  7. {
  8. int fd,n,m,m1;
  9. char status[10]="";
  10. char status1[12];//测试
  11. if ((fd=open("home/test",O_RDONLY))!=-1) {
  12.    n=read(fd,status,10); //n是实际读到的字节数
  13.    status[n]=0;
  14.    close(fd);
  15.    if (!strcmp(status,"test1") ){
  16.       printf("test1\n");
  17. //cout<<"test1"<<endl;
  18.       }else if (!strcmp(status,"test2") ) {
  19.                printf("test2\n");
  20. //cout<<"test2"<<endl;
  21.                }
  22.    }
  23. printf("n=%d\n",strlen(status));//这是读到文件的字节数
  24. printf("m=%d\n",sizeof(status));//这是你的数组的长度,当然为10
  25. printf("m1=%d\n",sizeof(status1));这里的输出结果应该为12
  26. //cout<<"n="<<strlen(status)<<endl;//
  27. exit(0);
  28. }
复制代码


--输出结果:
openlab.tarena.ca% ./a.out
test1
n=5
m=10
m1=12
[/code]

论坛徽章:
0
8 [报告]
发表于 2003-03-28 09:12 |只看该作者

一段错误代码:从文件中读取内容,然后和另一个字符串相比较。

very very 3ks
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP