gpt4 book ai didi

c++ - GetVolumeInformation() 产生不同的磁盘序列号

转载 作者:太空狗 更新时间:2023-10-29 23:39:50 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com