GetLogicalDriveStrings( sizeof(szDrives), szDrives ))
取得所有驱动器名,以ASCIIZ的形式存储在szDrives里面,你的程序的返回是
"a:\0c:\0d:\0\0",就是这样了

解决方案 »

  1.   


    GetLogicalDriveStrings( sizeof(szDrives), szDrives ))返回后,szDrives的内容,开始的几个字节,是'a',':','\0','c',':','\0','d',':','\0','\0',后面的可以不管了
    嘿嘿,科普工作者辛苦啊
      

  2.   

    *pDrive 是pDrive所指的字符,而cout<<pDrive则表示将pDrive所指之处的字符串输出。
    strlen( pDrive ) + 1为字符串长度加上字符串末尾占一个字节的‘\0’符。
      

  3.   

    seedundersnow:问题就出在这!既然szDrives作为一个字符数组,而区分每个驱动器相当于四个字符,如['a'][':']['\\']['\0']。而pDive怎么就能取出上面四个?我认为是指向一个字符['a']了!就是这让我糊涂!
      

  4.   

    ■■■大家快到QQ聊天室-自建聊天室(十四)-CSDN房间来,同贺申奥成功!!!■■■
      

  5.   

    这与cout有关,对于字符输出,它截断在第一个'\0'处。
      

  6.   

    从而可以解释循环的第二句中'Drive += strlen( pDrive ) + 1'为什么要加1了。
      

  7.   

    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循环也就退出了