- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
DWORD disk_serialINT[MAX_PATH + 1];
GetVolumeInformationA(NULL, NULL, NULL, disk_serialINT, NULL, NULL, NULL, NULL);
char* disk_serialANSI;
sprintf(disk_serialANSI, "%d", disk_serialINT);
std::string HDDserial = disk_serialANSI;
这是我获取硬盘序列号的代码,但问题是每次程序执行时值都不同。谁能解释一下?
已解决:
DWORD disk_serialINT;
GetVolumeInformationA(NULL, NULL, NULL, &disk_serialINT, NULL, NULL, NULL, NULL);
std::string HDDserial = std::to_string(disk_serialINT);
谢谢。
最佳答案
这两行会给你 undefined behavior :
char* disk_serialANSI;
sprintf(disk_serialANSI, "%d", disk_serialINT);
你声明了一个指针变量,但实际上并没有让它指向任何地方。未初始化的局部变量有一个不确定的值(实际上它看起来是随机的),并且通过使用那个未初始化的指针,您不知道 where sprintf
调用将写入。
由于您使用 C++ 进行编程,因此有多种解决方案。
老办法是让disk_serialANSI
成为一个字符数组,大到足以容纳数字(包括字符串终止符)。另一种方法是手动为指针分配内存,然后在用完后再次释放该内存。
使用 std::ostringstream
格式化数据并获取 std::string
。
使用 std::to_string
直接转换为字符串。
使用 Boost Lexical cast .
关于c++ - GetVolumeInformation() 产生不同的磁盘序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28193644/
DWORD disk_serialINT[MAX_PATH + 1]; GetVolumeInformationA(NULL, NULL, NULL, disk_serialINT, NULL, NU
我想为我正在编写的程序获取特定驱动器(FAT32、NTFS、FAT16)的文件系统类型。但是当我运行这段代码时,我在 szFileSystemName 变量中得到看似随机的结果。非常感谢任何帮助。 #
MSDN documentation和 knowledge base article GetVolumeInformation 不是很具体文件系统名称字符串可以包含什么。 明显的值是 NTFS、CDF
在使用 Inno Setup 创建的安装过程中,我需要获取驱动器号的卷序列号。我知道可以将 DLL 函数导入 Inno,但我对它很陌生,并且在使其工作时遇到了一些问题。我知道 kernel32 中的
你好, 我使用 GetLogicalDrives 获取所有驱动器,我想进一步使用它来检测驱动器类型,然后使用 GetVolumeInformation 检查特定驱动器的状态。但是,我无法在 GetVo
我正在尝试使用 Detours Express (3.0) Hook GetVolumeInformation,以更改音量序列。问题是每次调用 Hook 函数时,它都会返回一个随机卷序列。 #incl
我想使用 GetVolumeInformation 调用来检索可移动设备的名称。我可以很好地检索名称并将其存储到 TCHAR 数组变量 szVolNameBuff 中。这是我的代码: // Get
在使用 GetVolumeInformation() 报告的 FILE_READ_ONLY_VOLUME 文件系统标志检查 SD 卡是否被锁定时,我得到了一些奇怪的结果. 如果 SD 卡被锁定,并且
我是一名优秀的程序员,十分优秀!