拈花小仙 发表于 2014-4-5 16:08:03

关于GetLogicalDriveStrings输出的问题

本帖最后由 拈花小仙 于 2014-7-6 10:07 编辑

#include <Windows.h>
#include <stdio.h>
#include <tchar.h>

void SetVolume()
{
      TCHAR szText = {0};
    GetLogicalDriveStrings(260,szText);
    TCHAR* pszTmp = szText;
    while(0 != pszTmp)
    {
      _tprintf(TEXT("Drives:%s\n"),pszTmp);
      pszTmp = lstrlen(pszTmp) + 1 + pszTmp;      //为什么加1后跳过了 \0,还得在加个pszTmp
    }
}
int main(int argc,char* argv[])
{
    SetVolume();
    return 0;
}
C++编程小组

向往青莲 发表于 2014-4-5 16:08:04

pszTmp = lstrlen(pszTmp) + 1 + pszTmp;      //为什么加1后跳过了 \0,还得在加个pszTmp
因为pszTmp 只是个地址。。。
比如lstrlen(pszTmp) = 5
难道下一个盘符字符串地址就是lstrlem(pszTmp) + 1 = 6?
肯定不肯能撒。。肯定还要加上缓冲区首地址(打开比方哈)。。也就是pszTmp撒。。。
就是说下一个盘符地址等于
这个盘符首地址 + 盘符长度 + 末尾/0一个字节
懂?

向往青莲 发表于 2014-4-5 16:57:45

额。。。这么快。。。

拈花小仙 发表于 2014-4-5 16:59:12

向往青莲 发表于 2014-4-5 16:57 static/image/common/back.gif
额。。。这么快。。。

前面的有点晕,倒数第二句让我好像有点懂了,那在给我讲的透彻点{:7_181:}

向往青莲 发表于 2014-4-5 17:05:17

拈花小仙 发表于 2014-4-5 16:59 static/image/common/back.gif
前面的有点晕,倒数第二句让我好像有点懂了,那在给我讲的透彻点

好吧。。。
比如
char pszTmp = "C:\0D:\0E:\0F:\0";
则。。
我们去C盘的盘符的地址就是pszTmp...
求D盘的。。就是
pszTmp = pszTmp + C:的长度2 + 1
懂?
pszTmp就是那样的。。
页: [1]
查看完整版本: 关于GetLogicalDriveStrings输出的问题