CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

我难以理解的一段“简单代码”!指针让我晕菜了!

楼主dgcat_6(一个人埋头苦干的时代终于过去了。。。。)2001-07-13 18:04:49 在 VC/MFC / 基础类 提问

代码如下:  
                    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

相关问题

  • 难以理解的问题
  • sql server如此难以理解?
  • 难以理解的简单问题
  • 一个难以理解的问题
  • 俩段代码返回指针问题。
  • 返回指针的函数--附代码
  • 难以理解的问题:谁能猜到 BCB 的心思?
  • 请教三千兄:难以理解的OCP试题
  • 难以理解的问题期待高手讲解?
  • 写ATL组件时发现一个难以理解的问题?

关键词

  • 代码
  • szdrives
  • pdrive
  • char

得分解答快速导航

  • 帖主:dgcat_6
  • seedundersnow
  • edwardlj
  • david4no

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo