请帮我解决这个问题 在这里,我想将转换后的数据保存到新指针中。但每次使用最新数据覆盖数据时。 请检查我的代码
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];
答案 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 )
等