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