wcstok splittet nicht

24/10/2007 - 09:48 von Kniffel | Report spam
Hallo zusammen

Ich schreibe an einer ISAPI Anwendung für CE. Ich lese die
Übergabewert eines Formulars aus, danach möchte ich die Key-Value-
Paare teilen. Hab sowas schon mit strtok in anderen Anwendungen
gemacht, und funktionierte immer. Jetzt mit dem Unicode String habe
ich Probleme.

wchar_t * lpszTemp = NULL;
unsigned long cbQuery = NULL;
wchar_t * ZipNameArray[6];
wchar_t * ZipValueArray[6];
wchar_t * lpszQuery = NULL;
// Übergabewert von GET auslesen
if (0 == strcmpi(pECB->lpszMethod, "get"))
{
printf("GET");
lpszQuery = (wchar_t *)pECB->lpszQueryString;
}
// Übergabewert von POST auslesen
else if ( 0 == strcmpi(pECB->lpszMethod, "post") )
{
printf("POST");
lpszTemp = (wchar_t *)LocalAlloc( LPTR, pECB->cbTotalBytes);
if(NULL == lpszTemp)
return HSE_STATUS_ERROR;
// do not trust the compiler to zero the memory
memset(lpszTemp, '\0', pECB->cbTotalBytes);
wcsncpy(lpszTemp, (wchar_t *)pECB->lpbData, pECB->cbAvailable);
cbQuery = pECB->cbTotalBytes - pECB->cbAvailable;

if( cbQuery > 0 )
{
pECB->ReadClient(pECB->ConnID,(LPVOID)(lpszTemp + pECB-

cbAvailable), &cbQuery);


}
lpszQuery = lpszTemp;
}

// ÜBERGABEWERTE ausgeben
printf("lpszQuery: %s",lpszQuery);
wchar_t sep[] = L"&";
wchar_t * token;
token = wcstok(lpszQuery,sep);
// ÜBERGABEWERTE-PAARE TEILEN
while(token != NULL)
{
printf("TOKEN: %s",token);
token = wcstok(NULL,sep);
}

Als Ausgabe bekomme ich dann:
lpszQuery: einKey=einValue&nàchsterKey=nàchsterValue
TOKEN: einKey=einValue&nàchsterKey=nàchsterValue

An der Stelle wo er TOKEN ausgibt sollte er eigentlich dies ausgeben:
TOKEN: einKey=einValue
TOKEN: nàchsterKey=nàchsterValue

Jedoch macht er mir das nicht, ich bekomme keine Fehlermeldung im
Embedded VC++ noch steht meine Isapi Anwendung!
Hat mir jemand einen Tip?

Gruß
Kniffel
 

Lesen sie die antworten

#1 Helge Kruse
24/10/2007 - 10:34 | Warnen spam
Kniffel,

Ich weiß nicht, wie pECB definiert ist. Aber wenn pECB->lpszMethod ein PCHAR
ist, nehme ich an, dass auch pECB->lpszQueryString vom Typ PCHAR ist. In dem
Fall reicht es nicht, einen cast auf wchar_t* hinzuschreiben. Auch wenn
lpszQueryString ein Zeiger auf wide character ist zeigt er wohl noch auf
eine ANSI Zeichenkette.

Entweder Du benutzt MultiByteToWideChar um eine wchar_t Kopie des
QueryString zu erzeugen oder Du benutzt strtok direkt auf den Originaldaten.

/Helge

Ähnliche fragen