2010-04-19 6 views
0

S'il vous plaît aidez-moi sur ce Ici, je veux enregistrer les données converties en nouveaux pointeurs. Mais chaque fois que les données écrasent avec les données les plus récentes. S'il vous plaît vérifier mon codeTableau de données retournant problème, écrasement

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

Je gettting ptszSecondInFile et ptszOutFile à la fois même réponse. Est-il possible de faire avec TCHAR * nameBuffer [256];

Répondre

1

Vous semblez utiliser la variable globale nameBuffer dans le QStringToTCharBuffer. Rendez-le local ... Ou copiez simplement la valeur de nameBuffer dans l'appelant entre les deux appels ... sinon le deuxième appel écrasera la valeur de la variable globale ...

Comme conseil de programmation pour le futur: N'UTILISEZ PAS DE VARIABLES GLOBALES À MOINS D'AVOIR VRAIMENT! Dans ce cas, vous n'avez pas besoin de l'utiliser.

0

Vous avez besoin de mémoire pour stocker chaque chaîne dont vous avez besoin en même temps, de sorte qu'un buffer global ne fonctionnera pas ici. Soit votre fonction QStringToTCharBuffer allouer un nouveau tampon char pour chaque chaîne ou passer un tampon char à la fonction. Je conseillerais le second car vous êtes plus susceptible d'oublier qu'une fonction alloue de la mémoire.

i.e.:

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) 

etc.

Questions connexes