我难以理解的一段“简单代码”!指针让我晕菜了!
代码如下:
char szDrives[128];
char* pDrive;
if ( !GetLogicalDriveStrings( sizeof(szDrives), szDrives ) )
return FALSE;
pDrive = szDrives;
while( *pDrive )
{
cout<<pDrive;
pDrive += strlen( pDrive ) + 1;
}
代码执行完,可以如下输出:
a:c:d:但我不明白pDrive怎么恰好可以取出如上的字符?而且循环变量是
strlen( pDrive ) + 1
我原以为要一个一个字符的取出,判断,再组成象上面的输出样子。
pDrive应该是储存chat的地址呀,怎么变成了字符输出?
那*pDrive 代表什么?
问题点数:20、回复次数:9Top
1 楼seedundersnow(想当英雄的懦夫)回复于 2001-07-13 18:14:30 得分 0
GetLogicalDriveStrings( sizeof(szDrives), szDrives ))
取得所有驱动器名,以ASCIIZ的形式存储在szDrives里面,你的程序的返回是
"a:\0c:\0d:\0\0",就是这样了
Top
2 楼seedundersnow(想当英雄的懦夫)回复于 2001-07-13 18:16:00 得分 0
对了,不是\0c和\0d哦
Top
3 楼seedundersnow(想当英雄的懦夫)回复于 2001-07-13 18:19:15 得分 5
GetLogicalDriveStrings( sizeof(szDrives), szDrives ))返回后,szDrives的内容,开始的几个字节,是'a',':','\0','c',':','\0','d',':','\0','\0',后面的可以不管了
嘿嘿,科普工作者辛苦啊
Top
4 楼edwardlj()回复于 2001-07-13 18:19:55 得分 5
*pDrive 是pDrive所指的字符,而cout<<pDrive则表示将pDrive所指之处的字符串输出。
strlen( pDrive ) + 1为字符串长度加上字符串末尾占一个字节的‘\0’符。Top
5 楼dgcat_6(一个人埋头苦干的时代终于过去了。。。。)回复于 2001-07-13 23:18:18 得分 0
seedundersnow:问题就出在这!既然szDrives作为一个字符数组,而区分每个驱动器相当于四个字符,如['a'][':']['\\']['\0']。而pDive怎么就能取出上面四个?我认为是指向一个字符['a']了!就是这让我糊涂!
Top
6 楼enmity(灵感之源)回复于 2001-07-13 23:19:51 得分 0
■■■大家快到QQ聊天室-自建聊天室(十四)-CSDN房间来,同贺申奥成功!!!■■■Top
7 楼swxh(中重)回复于 2001-07-14 00:14:57 得分 0
这与cout有关,对于字符输出,它截断在第一个'\0'处。Top
8 楼swxh(中重)回复于 2001-07-14 00:16:53 得分 0
从而可以解释循环的第二句中'Drive += strlen( pDrive ) + 1'为什么要加1了。
Top
9 楼david4no(老杨)回复于 2001-07-14 00:28:08 得分 10
GetLogicalDriveStrings( sizeof(szDrives), szDrives )返回的szDrive中是以‘\0’隔开的字符串。而strlen()返回的是你的指针指向的值到第一个‘\0’之间的字符个数不包括‘\0’pDrive += strlen( pDrive ) + 1;其中加1是为了跳过'\0'字符coun<<pDrive可以输出A:等字符串。是因为在C\C++中把'\0'作为字符串的结束符!在szDrive剩余的部分是以'\0'字符填充的所以取到最后*pDrive 为0循环也就退出了Top




