Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
elimine un caracter dintr-un sir, care sã insereze un caracter <strong>în</strong>tr-un sir sau care sã<br />
extragã un subsir dintr-o pozitie datã a unui sir.<br />
La definirea unor noi functii pentru operatii pe siruri programatorul trebuie sã<br />
asigure adãugarea terminatorului de sir la rezultatul functiei, pentru respectarea<br />
conventiei si evitarea unor erori. Exemplu:<br />
// transforma un intreg intr-un sir de caractere (cifre in baza radix)<br />
char *itoa(int value, char *string, int radix) { // acelasi prototip cu functia<br />
standard<br />
char digits[] = "0123456789ABCDEF"; // dar “radix” poate fi cel mult 16<br />
char t[20], *tt=t, * s=string; // adresa “string” se modifica !<br />
do {<br />
*tt++ = digits [value % radix]; // sau: t[i++] = digits [value/radix];<br />
} while ( (value = value / radix) != 0 );<br />
while ( tt != t) // copiere de la tt la string in ordine inversa<br />
*string++= *(--tt);<br />
*string=0; // adauga terminator de sir<br />
return s; // rezultatul este adresa sirului creat<br />
}<br />
Functiile care produc ca rezultat un nou sir primesc o adresã (un pointer), unde se<br />
depune sirul creat <strong>în</strong> functie. Functia urmãtoare modificã sau adaugã o extensie datã la<br />
un nume de fisier, fãrã sã modifice numele primit:<br />
char* modext (char* oldfile, char* newfile, char *ext) {<br />
char * p;<br />
strcpy(newfile,oldfile);<br />
p =strrchr(newfile,'.'); // cauta pozitia ultimului punct din nume<br />
if (p==NULL) // daca nu are extensie<br />
strcat( strcat(newfile,"."),ext); // atunci se adauga extensia “ext”<br />
else // daca avea o extensie<br />
strcpy (p+1,ext); // atunci se inlocuieste cu extensia “ext’<br />
return newfile; // dupa modelul functiilor standard strcpy,…<br />
}<br />
Functia care apeleazã pe “modext” trebuie sã asigure suficientã memorie la adresa<br />
“newfile”, dar compilatorul nu poate verifica aceastã conditie. Exemplu:<br />
int main ( ) {<br />
char fname[]= “prog.com”, ext[]= ”exe”;<br />
char file[80]; // extensie la nume fisier (tip fisier)<br />
modext (fname, file,ext); // modificare extensie<br />
puts(file); // afisare ptr verificare<br />
}<br />
O eroare posibilã si care trece de compilare ar fi fost urmãtoarea declaratie: