返回问题的数据数组,覆盖

时间:2010-04-19 11:41:57

标签: c++ model-view-controller visual-c++

请帮我解决这个问题 在这里,我想将转换后的数据保存到新指针中。但每次使用最新数据覆盖数据时。 请检查我的代码

 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];

2 个答案:

答案 0 :(得分:1)

似乎你在QStringToTCharBuffer中使用全局变量nameBuffer。使其成为本地...或者只是在两次调用之间复制调用者中nameBuffer的值...否则第二次调用将覆盖全局变量的值......

作为未来的编程建议:除非你真的需要,否则不要使用全局变量!在这种情况下,您不必使用它。

答案 1 :(得分:0)

你需要内存来保存你需要的每个字符串,所以全局缓冲区在这里不起作用。要么QStringToTCharBuffer函数为每个字符串分配一个新的char缓冲区,要么将char缓冲区传递给该函数。我建议第二个,因为你更有可能忘记一个函数分配内存。

即:

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 )