2012-04-28 90 views
0
#ifndef UNICODE 
#define UNICODE 
#endif 

#include <Windows.h> 
#include <cstdio> 

TCHAR* getSystemVolumine() 
{ 
    TCHAR volumine[2]; 
    TCHAR buffer[30]; 

    GetSystemWindowsDirectory(buffer,30); 

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

    return volumine; 
} 


int main() 
{ 
    wprintf(L"Your system volumine letter%s\n",getSystemVolumine()); 
    system("pause"); 
} 

我不知道这段代码有什么问题。调试结果显示没有错误,也没有警告,但输出是:获取包含Windows系统目录的驱动器的盘符

Your system volumine letter 
Press any key to continue... 

回答

4

你是返回一个指向一个局部变量,当函数返回,该变量不再exsits 一种wprintf字符串必须结束与' \ 0' 。

#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"); 
} 
+0

我认为做volumine静态变量是多simplier解决方案:) – 0x6B6F77616C74 2012-04-28 14:27:11

+0

只是FWIW:它通常建议避免使用静态因此,如果代码是由多线程后,你就不会遇到问题;调用者提供缓冲区(上面)或者让函数返回一个新的缓冲区被认为是更清晰的。即使在单线程代码中,如果某段代码保存了指针,并且以后的调用会更改缓冲区中的值,则可能会出现问题。然而,在这种特殊情况下,由于系统目录是常量,并且在进程的整个生命周期内不会改变(对于所有线程都是一样的),所以静态在这里是很好和安全的。 – BrendanMcK 2012-04-30 17:30:25