关于程序问题前面已经说了,我也啰嗦下 , 大家莫拍啊
if("-h" == lpBuf)
这句就像前面说的比较的对应变量和常量的地址
"-h" 常量地址,调试时为 0xBA783c
lpBuf保存的是堆地址,调试时0x00488470
实际的比较是 if (0xBA783c == 0x00488470),我是看你不到那里会等啊
00BA210D cmp dword ptr [lpBuf],offset string "-h" (0BA783Ch)
00BA2114 jne wmain+7Dh (0BA212Dh)
这里改一版
(主要是说明下情况,实际这么写是找抽的)
if(((char*)&"-h")[0] == lpBuf[0] && ((char*)&"-h")[1] == lpBuf[1])
常量"-h" 对应内存内容为:
0x01057938 2d 68 00 00 25 73 00 00 5c 87 05 -h..%s..\?.
lpBuf的堆内容为:
0x003C8470 2d 68 00 cd cd cd cd cd cd cd fd -h.????????<--应该初始化下的
对应的汇编为:
取全局变量"-h"的第一字节到eax
0105217D movsx eax,byte ptr [string "-h" (1057938h)]
取lpBuf保存的堆地址,取堆中第一字节
01052184 mov ecx,dword ptr [lpBuf]
01052187 movsx edx,byte ptr [ecx]
比较的是内存对应的内容,第二次比较类似
0105218A cmp eax,edx
0105218C jne wmain+97h (10521B7h)
0105218E movsx eax,byte ptr ds:[1057939h] //1057938h后面一个字节
01052195 mov ecx,dword ptr [lpBuf]
01052198 movsx edx,byte ptr [ecx+1]
0105219C cmp eax,edx
0105219E jne wmain+97h (10521B7h)
程序其他小瑕疵:
申请的空间要检查是否ok
使用完毕要释放
变量名字要形象
const int g_nBufSize = 10;
int _tmain(int argc, _TCHAR* argv[])
{
char *lpBuf; // ch
lpBuf = new char[g_nBufSize];
if (NULL == lpBuf) //虽然new很少失败
return -1;
memset(lpBuf, 0, g_nBufSize);
scanf("%s", lpBuf);
if(((char*)&"-h")[0] == lpBuf[0] && ((char*)&"-h")[1] == lpBuf[1])
//if ( '-' == lpBuf[0] && 'h' == lpBuf[1])
{
printf("ok");
}
if (lpBuf) //记得释放哦
{
delete lpBuf;
lpBuf = NULL;
}
return 0;
}
希望此类难题会被你轻松搞定, 周末愉快。