2010-04-19 59 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)