'ste donne...
Codice PHP:
/*
8 july 2009, by MacApp
Just a memmove sample, zero errors zero warnings.
$ gcc --version
i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367)
Copyright (C) 2005 Free Software Foundation, Inc.
$ gcc -Wall -ansi -pedantic -Wextra -Wconversion main.c
$ ./a.out
1.9 - Ciao Pia, sono MacApp ti scrivo per dirti...;
2.9 - Ciao Fabrizia, sono MacApp ti scrivo per dirti...;
3.9 - Ciao Clara, sono MacApp ti scrivo per dirti...;
4.9 - Ciao Paola, sono MacApp ti scrivo per dirti...;
5.9 - Ciao Lucia, sono MacApp ti scrivo per dirti...;
6.9 - Ciao Mamma, sono MacApp ti scrivo per dirti...;
7.9 - Ciao Zia, sono MacApp ti scrivo per dirti...;
8.9 - Ciao Nonna, sono MacApp ti scrivo per dirti...;
9.9 - Ciao Nipotina, sono MacApp ti scrivo per dirti...;
bye bye ;-)
*/
#include <stdio.h>
#include <string.h>
#define IG_DIM_OF_ARRAY(theArray) ((sizeof (theArray))/(sizeof (theArray [0])))
int main (void){
const char kStrWomanTag []= "DONNA";
char aBuffer [1024];
sprintf (aBuffer, "Ciao %s, sono MacApp ti scrivo per dirti...", kStrWomanTag);
{ /* extra block */
const size_t aOriginalBufferLength = strlen (aBuffer);
char * kWomanTagPtr = strstr (aBuffer, kStrWomanTag);
const size_t aSentenceToMoveLength = strlen (aBuffer) - (kWomanTagPtr - aBuffer + IG_DIM_OF_ARRAY (kStrWomanTag));
const char * kMixOfWomen []={
"Pia", "Fabrizia", "Clara", "Paola", "Lucia", "Mamma", "Zia", "Nonna", "Nipotina"
};
size_t i = 0;
size_t aOldWomanNameLength = IG_DIM_OF_ARRAY (kStrWomanTag) - 1;
for (i = 0; i < IG_DIM_OF_ARRAY (kMixOfWomen); ++i){
const size_t aNewWomanNameLength = strlen (kMixOfWomen [i]);
memmove (kWomanTagPtr + aNewWomanNameLength, kWomanTagPtr + aOldWomanNameLength, aSentenceToMoveLength + 1);
memmove (kWomanTagPtr, kMixOfWomen [i], aNewWomanNameLength);
aBuffer [aOriginalBufferLength - IG_DIM_OF_ARRAY (kStrWomanTag) + aNewWomanNameLength + 1] = 0;
aOldWomanNameLength = aNewWomanNameLength;
printf ("%lu.%lu - %s;\n", i+1, IG_DIM_OF_ARRAY (kMixOfWomen), aBuffer);
}
}
printf ("bye bye ;-)\n");
return 0;
}
;-)
EDIT: osserva che il "lavoro" è stato fatto andando a cercare il tag DONNA in buffer, e tramite una doppia memmove (in realtà la seconda memmove puoi sostituirla con una memcpy perché non c'è rischio di overlap) sostituendolo con le varie donne impostate nel contenitore di donne, senza utilizzare buffer extra di copia. In output ti viene presentato di volta in volta il contenuto del buffer. Se puoi appoggiarti ad un buffer extra di copia, allora puoi semplificare moltissimo facendo robe del tipo:
codice:
sprintf (aExtraBuffer, "Ciao %s, sono MacApp ecc..", kMixOfWomen [i]);