鱼C论坛

 找回密码
 立即注册
查看: 2364|回复: 4

关于GetLogicalDriveStrings输出的问题

[复制链接]
发表于 2014-4-5 16:08:03 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 拈花小仙 于 2014-7-6 10:07 编辑

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

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

最佳答案

查看完整内容

pszTmp = lstrlen(pszTmp) + 1 + pszTmp; //为什么加1后跳过了 \0,还得在加个pszTmp 因为pszTmp 只是个地址。。。 比如lstrlen(pszTmp) = 5 难道下一个盘符字符串地址就是lstrlem(pszTmp) + 1 = 6? 肯定不肯能撒。。肯定还要加上缓冲区首地址(打开比方哈)。。也就是pszTmp撒。。。 就是说下一个盘符地址等于 这个盘符首地址 + 盘符长度 + 末尾/0一个字节 懂?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-5 16:08:04 | 显示全部楼层
pszTmp = lstrlen(pszTmp) + 1 + pszTmp;        //为什么加1后跳过了 \0,还得在加个pszTmp
因为pszTmp 只是个地址。。。
比如lstrlen(pszTmp) = 5
难道下一个盘符字符串地址就是lstrlem(pszTmp) + 1 = 6?
肯定不肯能撒。。肯定还要加上缓冲区首地址(打开比方哈)。。也就是pszTmp撒。。。
就是说下一个盘符地址等于
这个盘符首地址 + 盘符长度 + 末尾/0一个字节
懂?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-5 16:57:45 | 显示全部楼层
额。。。这么快。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-5 16:59:12 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-5 17:05:17 | 显示全部楼层
拈花小仙 发表于 2014-4-5 16:59
前面的有点晕,倒数第二句让我好像有点懂了,那在给我讲的透彻点

好吧。。。
比如
char pszTmp[200] = "C:\0D:\0E:\0F:\0";
则。。
我们去C盘的盘符的地址就是pszTmp...
求D盘的。。就是
pszTmp = pszTmp + C:的长度2 + 1
懂?
pszTmp就是那样的。。

评分

参与人数 1鱼币 +3 收起 理由
拈花小仙 + 3 谢谢青莲,我在好好想想

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 14:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表