首页
社区
课程
招聘
[求助]再问c++中感叹号是什么意思??
发表于: 2008-11-3 12:51 6941

[求助]再问c++中感叹号是什么意思??

2008-11-3 12:51
6941
新手,想写驱动,看了论坛里一段PRmonitor.sys的源码,想问关于感叹号“!”的问题:
1、 if( !strncmp( "System", (PCHAR) curproc + i, strlen("System") ))
    strncmp()我知道是比较字串大小的,想知道,这句if到底是想判断什么,什么情况下返回真? 这个感叹号还是起否定的作用吗,那是否定什么条件啊?

2、DWORD a,
     while(1)
        {
                memmove(&a,&outputbuff[0],4);
                if(!a){Sleep(10);continue;}       //???这里a还没被赋值,怎么参与的判断啊??
                char*name=(char*)&outputbuff[8];
                for(x=0;x<stringcount;x++)
                {
                        if(!stricmp(name,strings[x])){a=1;goto skip;}
                }
   看了上面几句,好疑惑,变量a声明后,还未赋值,怎么就参与 if 判断了,if(!a){Sleep(10);continue;}这里是要判断a,那什么时候这句才返回真啊???

请高手指点下啊,共同学习!!

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
还是去 翻书 好好看一看 C中的符号定义吧
memmove(&a,&outputbuff[0],4);  //这里不已经对a进行啦操作么? &a 取a的地址,
    if(!a){Sleep(10);continue;}       //???这里a还没被赋值,怎么参与的判断啊??
    char*name=(char*)&outputbuff[8];
    for(x=0;x<stringcount;x++)
2008-11-3 13:00
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=chleaves;529865]还是去 翻书 好好看一看 C中的符号定义吧
memmove(&a,&outputbuff[0],4);  //这里不已经对a进行啦操作么? &a 取a的地址,
    if(!a){Sleep(10);continue;}       //???这里a还没被赋值,怎么参与的判...[/QUOTE]

如果已对a赋值了,那 if (!a)  是不是说不论a为什么值,都给否定掉吗? 想问下这个 if (!a) 什么时候返回真,什么时候返回假??
2008-11-3 13:24
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
4
请先学习C语言。

关于书本中的基础知识的问题,请自行解决。

本论坛的技术特色是软件安全,逆向工程和内核底层技术。

如果学习C语言有困难,请到开发者社区寻求帮助。

推荐:CSDN
2008-11-3 14:01
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
估计也只有低水平的人对新手这么牛叉吧,真正的高手一般都很平易近人的。
2008-11-3 14:03
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
逻辑非

!num

如果 num 的值不为零,则 !num 为假;如果 num 的值为零,则 !num 为真。
也就是说,! 的作用是把真变为假,把假变成真。


你的基础真的不敢恭维

strcmp功能:比较字符串s1和s2。
  
说明:
当s1<s2时,返回值<0
当s1=s2时,返回值=0
当s1>s2时,返回值>0

int strcmp ( string str1, string str2 );

当str1小于str2时返回负数, 当str1大于str2时返回正数,相等时候返回0。

注意比较是区分大小写的。

strcmp("h","o")结果为-1是正确的,因为"h"的ASCII码ox68小于"o"的ASCII码0x6f。

字母表里面后面的ASCII码大,比如'b'>'a',所有小写的比大写的字母大,比如'a'>'Z'。

如果相比较的字符串相同的话就是真,字符串不相同的话就是假
2008-11-3 18:49
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
7
对不起,虽然我不敢自称高手,但自认还不能算是低水平。

我的意思是说楼主的学习态度不端正。

遇到困难向人请教,本来无可厚非。我本是十分乐意帮助别人的。可是如果自己一点都不动,什么都请教。这就有点说不过去了。老师喜欢爱提问的学生,但不喜欢提不应该提的问题的学生,因为这样的学生提问没有经过思考。

而且这个问题有多么基础,所有人都能看出来。

任何一本初级的C教程里,绝对是讲得非常清楚的。

我并没有对发贴的人表示轻蔑。

况且我已经很仔细回答过他的问题了。不是在这贴。

但是我后来发现他同一个问题发了三个贴。就忍不住进来再说一句。而且我认为我说的语气没什么问题吧。

你说我低水平,没关系。但我的人品绝对没问题。
2008-11-3 22:00
0
游客
登录 | 注册 方可回帖
返回
//