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);
您声明了一个指针变量,但实际上并没有让它指向任何地方。未初始化的局部变量具有不确定的值(实际上它看起来是随机的),并且通过使用未初始化的指针,您不知道
sprintf
调用将写入何处。由于您使用 C++ 进行编程,因此有几种解决方案。
disk_serialANSI
成为一个字符数组,大到足以容纳数字(包括字符串终止符)。另一种方法是手动为指针分配内存,然后在完成后再次释放该内存。 std::ostringstream
格式化数据并获得 std::string
。 std::to_string
直接转换为字符串。 关于c++ - GetVolumeInformation() 导致不同的磁盘序列号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28193644/