| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 601 人关注过本帖
标题:老大呢,关于字符串比较问题
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:20 回复次数:4 
老大呢,关于字符串比较问题
int main(int argc,char *argv[])
{
    //解析命令行部分
    if(argc<2) goto _main;
    if(argv[1]=="/?")   //大家都知道字符串比较应该用strcmp来比较,而不能用==直接比较
                        //但是为什么呢,用OD看了一下源代码 没看懂啊
    {
        printf("可接受 /? /h 参数 其他参数被忽略\n");
        printf("本程序的作用是用于计算三角形面积\n");
        printf("请用空格分开三条边的参数 例如:4 5 6\n");
        return 0;
    }
_main: //程序主体部分
图片附件: 游客没有浏览图片的权限,请 登录注册


2个都是 ascii "\?"  为什么不相等呢,难道和那个DWORD PTR 有关

[ 本帖最后由 wp231957 于 2012-11-18 11:20 编辑 ]
搜索更多相关主题的帖子: return 源代码 字符串 三角形 
2012-11-18 11:19
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:10 
因为在C语言里

argv[1]就相当于一个地址
"/?"也相当于一个地址 而两个地址是不相等的 所以不相等

但在个别时候是存在"asdf" == "asdf" 的情况的 那是因为这俩字符串在编译出的程序里面就是一个 所以地址也相等 所以相等 但这不一定 和编译器和环境相关

以上是从C的角度说的 网速慢图看不全 搬砖的环境真差啊
2012-11-18 11:31
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
汇编角度呢

图片看不全  可以下载啊

C角度解释 可以接受了

DO IT YOURSELF !
2012-11-18 11:36
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用wp231957在2012-11-18 11:36:33的发言:

汇编角度呢

图片看不全  可以下载啊

C角度解释 可以接受了

牵扯堆栈得画一下

此时堆栈是

                              
...局部变量...|ebp|返回值|argc|argv|
              ^
              ebp         
此时ebp指向了上面的ebp..

[ebp+C]也就是argv 一个指针数组 数组内的每个元素是是个指针 这个数组的首地址赋值给eax 然后[eax+4]取第二个元素 是一个指针 也就是C里面的argv[1] 这里最终得到了一个指针

下面那个也是指针 而这俩指针必然不相等 一个是你输入的 一个是代码编译的时候就有的 肯定没法比

所以这里比的最终还是指针而非字符串

[ 本帖最后由 zklhp 于 2012-11-18 11:59 编辑 ]
2012-11-18 11:57
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:10 
Z版说的很好
数据区里面的0041ca30是个地址吧。

梅尚程荀
马谭杨奚







                                                       
2012-11-18 12:53
快速回复:老大呢,关于字符串比较问题
数据加载中...
 
   



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

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