C++ 获取包含windows系统目录的驱动器的盘符

C++ 获取包含windows系统目录的驱动器的盘符,c++,windows,winapi,C++,Windows,Winapi,返回一个指向局部变量的指针,当函数返回时,该变量不再存在 wprintf的字符串必须以“\0”结尾 Your system volumine letter Press any key to continue... #包括 #包括 无效getSystemVolumine(TCHAR*vol) { TCHAR缓冲区[30]; GetSystemWindowsDirectory(缓冲区,30); 对于(int i=0;i

返回一个指向局部变量的指针,当函数返回时,该变量不再存在 wprintf的字符串必须以“\0”结尾

Your system volumine letter
Press any key to continue...
#包括
#包括
无效getSystemVolumine(TCHAR*vol)
{
TCHAR缓冲区[30];
GetSystemWindowsDirectory(缓冲区,30);
对于(int i=0;i<2;i++)
vol[i]=缓冲区[i];
vol[2]=0;
}
int main()
{
TCHAR卷[3];
getSystemVolumine(体积);
wprintf(L“您的系统卷号字母%S\n”,卷号);
系统(“暂停”);
}

您正在返回指向局部变量的指针,当函数返回时,该变量不再存在 wprintf的字符串必须以“\0”结尾

Your system volumine letter
Press any key to continue...
#包括
#包括
无效getSystemVolumine(TCHAR*vol)
{
TCHAR缓冲区[30];
GetSystemWindowsDirectory(缓冲区,30);
对于(int i=0;i<2;i++)
vol[i]=缓冲区[i];
vol[2]=0;
}
int main()
{
TCHAR卷[3];
getSystemVolumine(体积);
wprintf(L“您的系统卷号字母%S\n”,卷号);
系统(“暂停”);
}

我认为将volumine变量设置为静态是更简单的解决方案:)只是一个FWIW:通常建议避免使用静态,这样,如果以后将代码设置为多线程,就不会遇到问题;让调用者提供缓冲区(如上所述)或让函数返回新的缓冲区被认为更干净。即使在单线程代码中,如果某段代码保存了指针,并且稍后的调用更改了缓冲区中的值,也会出现问题。但是,在这种特定情况下,由于系统目录是常量,并且在进程的生命周期内不会更改(对于所有线程都是相同的),静态在这里很好,也很安全。我认为将volumine变量设置为静态是更简单的解决方案:)只是一个FWIW:通常建议避免使用静态,这样,如果以后将代码设置为多线程,您就不会遇到问题;让调用者提供缓冲区(如上所述)或让函数返回新的缓冲区被认为更干净。即使在单线程代码中,如果某段代码保存了指针,并且稍后的调用更改了缓冲区中的值,也会出现问题。但是,在这种特定情况下,由于系统目录是常量,并且在进程的生命周期内不会更改(对于所有线程都是相同的),因此静态在这里是安全的。
#include <Windows.h>
#include <cstdio>

void getSystemVolumine(TCHAR *vol)
{
    TCHAR buffer[30];

    GetSystemWindowsDirectory(buffer,30);

    for(int i=0 ; i < 2 ; i++)
        vol[i]=buffer[i];

    vol[2] = 0;
}


int main()
{
    TCHAR vol[3];

    getSystemVolumine(vol);

    wprintf(L"Your system volumine letter %S\n",vol);
    system("pause");
}