2012-04-28 14 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

、その変数は、もはや "wprintfのための文字列がで終わらなければならない をexsitsありません\ 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

+0

だけFWIW:一般的には、コードは、後にマルチスレッド行われた場合、あなたが問題に実行しないように、静力学の使用を避けることをお勧めします。呼び出し元にバッファを提供させるか(上記)、関数が新しいバッファを返すようにするのがよりクリーンであると考えられます。シングルスレッドコードであっても、コードの一部がポインタを節約し、後で呼び出しがバッファ内の値を変更すると、問題が発生する可能性があります。しかし、この特定のケースでは、システムディレクトリは一定であり、プロセスの存続期間中は変更されないため(すべてのスレッドで同じです)、ここでは静的であり、安全です。 – BrendanMcK

関連する問題