鱼C论坛

 找回密码
 立即注册
查看: 4444|回复: 5

函数strlen(x)-strlen(y) 的值到底是多少呢?各位高手来帮忙

[复制链接]
发表于 2014-7-12 09:58:15 | 显示全部楼层 |阅读模式
8鱼币
本帖最后由 风之残月 于 2014-11-10 10:19 编辑

//疑问:if(strlen(str1)-strlen(str2) >=0 ) 为啥恒为真。。
#include<stdio.h>
#include<string.h>
int main( void )
{
char str1[] = "newgril" ; //strlen(str1) =7
char str2[] = "schoolgirl" ;//strlen(str2) = 10 ;
int x, y ,z;
x = strlen(str1) ;           // x=strlen(strl) = 7  
y = strlen(str2) ;           // x = strlen(str2) = 10
z = strlen(str1) -strlen(str2) ;   // z= -3
if(strlen(str1)-strlen(str2) >= 0 ) //if() 条件真
  printf("Ok") ;               //结果输出了ok
else
  printf("no") ;
printf("x=%d y= %d",x,y) ;
printf("z= %d",z) ;
printf("strlen(str1)-strlen(str2) = %d",
  strlen(str1)-strlen(str2) ) ; // 这里输出了strlen(str1) - strlen(str2) = -3
  return 0 ;
}

最佳答案

查看完整内容

如上楼所说。strlen(str1)-strlen(str2) 是一个无符号整型。由于无符号类型不能是负数,它的数值应该是4294967293。所以恒为真也就不难解释了 至于你输出的时候是-3.是因为把他强制类型转换为有符号类型了。如上所说用%u格式输出会见真章。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-12 09:58:16 | 显示全部楼层
如上楼所说。strlen(str1)-strlen(str2) 是一个无符号整型。由于无符号类型不能是负数,它的数值应该是4294967293。所以恒为真也就不难解释了
至于你输出的时候是-3.是因为把他强制类型转换为有符号类型了。如上所说用%u格式输出会见真章。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-12 11:09:40 | 显示全部楼层
x=strlen(str1) = 7  
y=strlen(str2) = 10
Printf("strlen(str1)-strlen(str2) = %d",strlen(str1)-strlen(str2) ) ; // 这里输出了strlen(str1) - strlen(str2) = -3
//7减去10 不就是-3吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-12 12:26:40 | 显示全部楼层
size_t 相减
出来的结果还是size_t
size_t  这个你可以去看下,是无符号的整形
打印出来看看

size_t d = strlen(str1)-strlen(str2);
        printf("d = %u\n",d);
        if( d >= 0 ) //if() 条件真
                printf("Ok") ;               //结果输出了ok
        else
                printf("no") ;

比较的时候需要转换成有符号的整形进行比较
if( (int)d >= 0 )

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
Potato丶 + 5 + 5 + 2 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-12 13:39:01 | 显示全部楼层
本帖最后由 农夫三拳有点痛 于 2014-7-12 14:12 编辑

#include<iostream>
using namespace std;
int main( void )
{
    char str1[] = "newgril" ; //strlen(str1) =7
    char str2[] = "schoolgirl" ;//strlen(str2) = 10 ;
    if(int(strlen(str1)-strlen(str2)) >=0) {
        cout<<"true\n";
    }else{
        cout<<"false\n";
    }
    return 0 ;
}

这样是不是楼主的要求呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-12 20:11:04 | 显示全部楼层
感谢以上各楼的热心回答,还是把鱼币给了1楼鱼c ,版主的回答,直接解决了我的疑惑。其他人说的其实我知道。再次感谢各位鱼由的热心帮助。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 16:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表