La funzione si chiama ExtractValue, ed è preceduta da un piccolo esempio del suo impiego:
codice:
#include <iostream>
#include <cstring>
#define min(a,b) (((a) < (b)) ? (a) : (b))
using namespace std;
char * ExtractValue(const char * source, const char * key, char * buffer, size_t bufsize);
int main()
{
char sorgente[256], chiave[256], valore[256];
cin.getline(sorgente,sizeof(sorgente));
cin.getline(chiave,sizeof(chiave));
if(ExtractValue(sorgente,chiave,valore,sizeof(valore)))
cout<<valore;
else
cout<<"Valore non trovato";
cin.ignore();
return 0;
}
char * ExtractValue(const char * source, const char * key, char * buffer, size_t bufsize)
{
char * nextEq, * nextAmp;
do
{
if(source==NULL)
return NULL;
if((nextEq=strchr(source,'='))==NULL)
return NULL;
if(!strncmp(source,key,nextEq-source))
{
nextAmp=strchr(source,'&');
if(nextAmp!=NULL)
{
strncpy(buffer,nextEq+1,min(bufsize,nextAmp-nextEq)-1);
buffer[min(bufsize,nextAmp-nextEq)-1]=0;
}
else
{
strncpy(buffer,nextEq+1,bufsize);
buffer[bufsize-1]=0;
}
return buffer;
}
} while((source=strchr(source+1,'&'))!=NULL && source++);
return NULL;
}
.