首页
社区
课程
招聘
[求助]char类型加法运算的疑问
发表于: 2018-3-9 17:32 3387

[求助]char类型加法运算的疑问

2018-3-9 17:32
3387
取当前运行目录代码
	GetModuleFileName(NULL, tInitPath, MAX_PATH);
	char* pos = tInitPath + strlen(tInitPath);

	while (pos >= tInitPath && *pos != '\\') --pos;
	pos[1] = 0;
       strcat_s(tInitPath, "settings.ini");

这段看不明白,查了许多,说是char类型加减法运算,自动转换成ASCII参与运算
可以为什么要 加上字符串长度呢?
char* pos = tInitPath + strlen(tInitPath);
反汇编窗口也没看明白,惭愧

求助













[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
2

GetModuleFileName(NULL, tInitPath, MAX_PATH);拿到的地址类似于 C:\demo.exe这样,char* pos = tInitPath + strlen(tInitPath);作用是将指针指向最后一个字符e,然后指针向前移动,一直移动到\字符,再将\字符后面的数据修改为0也就是截断字符串,使其成为C:\,最后再拼接上settings.ini

最后于 2018-3-9 17:42 被KevinsBobo编辑 ,原因:
2018-3-9 17:41
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
KevinsBobo `GetModuleFileName(NULL, tInitPath, MAX_PATH);`拿到的地址类似于 `C:\demo.exe`这样,`char* pos = tInitPath + str ...
执行过程是这样,,,可是
char*  pos  =  tInitPath  +  strlen(tInitPath);
怎么就能将指针移动到最后一个字符呢?


2018-3-9 17:47
0
雪    币: 704
活跃值: (3360)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
4
KevinsBobo `GetModuleFileName(NULL, tInitPath, MAX_PATH);`拿到的地址类似于 `C:\demo.exe`这样,`char* pos = tInitPath + str ...
纠结一下:并不是移动到最后一个字符e,而是e后面的\0
2018-3-9 17:49
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
5
yeyeshun 纠结一下:并不是移动到最后一个字符e,而是e后面的\0
感谢指正
2018-3-9 17:51
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
6
taizhong 执行过程是这样,,,可是 char* pos = tInitPath + strlen(tInitPath); 怎么就能将指针移动到最后一个字符呢? [em_2]
这个。。。还是建议楼主看书吧,毕竟这些基础知识不是一两句话能讲完的
2018-3-9 17:52
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
多看书,,,,
2018-3-9 17:54
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
8
taizhong 多看书,,,,
因为这是指针的问题,为什么一个指针加上一个数字长度就可以往后移,是因为指针指向的是内存的位置,所以给当前位置加上一个长度就到了下一个位置了。但指针移动相关的知识点不止这些,还有指针的类型、指针之间只能相减不能相加等等,所以才建议楼主去看书,系统的了解一下,后面遇到其它问题就不会浪费时间在语法上面了
2018-3-9 18:01
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
KevinsBobo 因为这是指针的问题,为什么一个指针加上一个数字长度就可以往后移,是因为指针指向的是内存的位置,所以给当前位置加上一个长度就到了下一个位置了。但指针移动相关的知识点不止这些,还有指针的类型、指针之间只能 ...
谢谢,,,基础知识太差了
2018-3-9 18:12
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
strlen  是求长度,不带最后的0结束位置。就是指向e
2018-3-9 23:00
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
obiter strlen 是求长度,不带最后的0结束位置。就是指向e
strlen  (C语言函数)  编辑
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')
//==========
strlen确实是字符串的长度,
不过,char*    pos    =    tInitPath    +    strlen(tInitPath)这句中,tlniPath应该指向的是字符串的第一个字符,加上长度,指向了  0
反汇编窗口也是  指向  0
2018-3-9 23:57
0
雪    币: 1795
活跃值: (63)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
楼上都把我想说的都说了,留个标记吧。。
2018-3-10 13:34
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
DWORD  GetModuleFileName(    HMODULE  hModule,        //  handle  to  module
    LPTSTR  lpFilename,    //  file  name  of  module
    DWORD  nSize                  //  size  of  buffer);
tlnitPath  是一个字符串类型的指针,指向的字符串,它也有地址
char类型计算时,取出这个指针地址保存的4字节ASCII码,以int型参与运算  ,即字符串的首地址参与运算
2018-3-10 18:36
0
游客
登录 | 注册 方可回帖
返回
//