求助一个问题,请朋友们支招
本帖最后由 jetvf 于 2012-01-01 21:20:40 编辑
#include "windows.h"
#include "tchar.h"
#include "iostream.h"
char * DispDriveType(int n)
{
switch(n)//关于磁盘类型的定义,在 winbase.h 中定义
{
case 0://DRIVE_UNKNOWN
return "未知磁盘";
break;
case 1://DRIVE_NO_ROOT_DIR 无法找到根目录
return "磁盘不存在";
break;
case 2://DRIVE_REMOVABLE 可移动驱动器
return "可移动磁盘";
break;
case 3://DRIVE_FIXED 固定磁盘驱动器:本地硬盘或移动硬盘
return "本地磁盘";
break;
case 4://DRIVE_REMOTE
return "网络驱动器";
break;
case 5://DRIVE_CDROM
return "CD/DVD_ROM";
break;
case 6://DRIVE_RAMDISK
return "随机存取磁盘";
break;
}
}
void main()
{
TCHAR a[256]; //unsigned short
DWORD len=GetLogicalDriveStrings(sizeof(a)/sizeof(TCHAR),a); //unsigned long
cout<<"磁盘符号"<<"\t"<<"磁盘类型"<<endl;
for(TCHAR *s=a;*s;s+=_tcslen(s)+1)//unsigned short
{
cout<<s<<"\t\t"<<DispDriveType(GetDriveType(s))<<endl;
}
cin.get();
}
DWORD len=GetLogicalDriveStrings(sizeof(a)/sizeof(TCHAR),a); //unsigned long
for(TCHAR *s=a;*s;s+=_tcslen(s)+1)//unsigned short
{
cout<<s<<"\t\t"<<DispDriveType(GetDriveType(s))<<endl;
}
和你填进去的sizeof(a)/sizeof(TCHAR)有关
那么当*s = a时 s指向的字符串是"C:"因为看到\0就认为字符串结束了
开始循环
1:*s = 'C' -> 执行循环体 -> _tcslen(s) 相当于 _tcslen("C:")等于2, +1=3 -> s+=_tcslen(s)+1 s指向"D:"
2:*s = 'D' -> 执行循环体 -> _tcslen(s) 相当于 _tcslen("D:")等于2, +1=3 -> s+=_tcslen(s)+1 s指向"E:"
3:*s = 'E' -> 执行循环体 -> _tcslen(s) 相当于 _tcslen("E:")等于2, +1=3 -> s+=_tcslen(s)+1 s指向"\0"
4:*s = '\0' 退出循环