2010-04-19 83 views
0

請幫我在這裏 在這裏我想將轉換的數據保存到新的指針。但每次數據都會覆蓋最新的數據。 請檢查我的代碼數組返回問題,覆蓋

TCHAR nameBuffer[256]; //Globally Declared 

void Caller() 
{ 
TCHAR* ptszSecondInFile= QStringToTCharBuffer(userName); 
TCHAR* ptszOutFile=QStringToTCharBuffer(Destinationfilename); 
} 

TCHAR *dllmerge::QStringToTCharBuffer(QString buffer) 
{ 
    memset(nameBuffer, 0, sizeof(nameBuffer)); 
#if UNICODE 
_tcscpy_s(nameBuffer, _countof(nameBuffer), buffer.toUtf8()); 
#else 
_tcscpy_s(nameBuffer, _countof(nameBuffer), buffer.toLocal8Bit()); 
#endif 
_tprintf(_T("nameBuffer %s\n"), nameBuffer); 
return nameBuffer; 
} 

我流汗ptszSecondInFile和ptszOutFile都相同的答案。 是否可以使用TCHAR * nameBuffer [256];

回答

1

似乎您使用QStringToTCharBuffer中的全局變量nameBuffer。讓它成爲本地...或者只是在兩個調用之間複製調用方中的nameBuffer的值...否則第二個調用將覆蓋全局變量的值...

作爲未來的編程建議:不要使用全局變量,除非你真的需要!在這種情況下,您不必使用它。

0

您需要內存來保存每次需要的字符串,因此全局緩衝區不會在這裏工作。要麼你的QStringToTCharBuffer函數爲每個字符串分配一個新的字符緩衝區,或將一個字符緩衝區傳遞給該函數。我建議第二個,因爲你更可能忘記一個函數分配內存。

即:

TCHAR *dllmerge::QStringToTCharBuffer(QString buffer) 
{ 
    TCHAR* nameBuffer = new TCHAR[256]; 

    memset(nameBuffer, 0, sizeof(nameBuffer)); 
#if UNICODE 
    _tcscpy_s(nameBuffer, _countof(nameBuffer), buffer.toUtf8()); 
#else 
    _tcscpy_s(nameBuffer, _countof(nameBuffer), buffer.toLocal8Bit()); 
#endif 
    _tprintf(_T("nameBuffer %s\n"), nameBuffer); 
    return nameBuffer; 
} 

VS:

void Caller() 
{ 
    const int maxSize = 256; 
    TCHAR szSecondInFile[maxSize]; 
    TCHAR szOutFile[maxSize]; 
    QStringToTCharBuffer(userName, szSecondInFile, maxSize); 
    QStringToTCharBuffer(Destinationfilename, szOutFile, maxSize); 
} 

dllmerge::QStringToTCharBuffer(QString buffer, TCHAR* pOutString, const int size)