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.
Functia “substr” va avea rezultate corecte si la al doilea apel dacã se modificã<br />
declararea variabilei “aux” astfel:<br />
char * aux=strdup(s); // sau: aux= (char*) malloc(strlen(s)+1);<br />
Pentru realizarea unor noi operatii cu siruri se vor folosi pe cât posibil functiile<br />
existente. Exemple:<br />
// sterge n caractere de la adresa “d”<br />
char * strdel ( char *d, int n) {<br />
if ( n < strlen(d))<br />
strcpy(d,d+n);<br />
return d;<br />
}<br />
// insereazã sirul s la adresa d<br />
void strins (char *d, char *s) {<br />
int ls=strlen(s);<br />
scopy (d+ls,d); // deplasare sigura la dreapta sir d<br />
strncpy(d,s,ls); // adauga sirul s la adresa d<br />
}<br />
Precizãri la declararea functiile standard sau nestandard pe siruri :<br />
- Argumentele sau rezultatele ce reprezintã lungimea unui sir sunt de tip size_t<br />
(echivalent de obicei cu unsigned int) si nu int, pentru a permite siruri de lungime mai<br />
mare.<br />
- Argumentele ce reprezintã adrese de siruri care nu sunt modificate de functie se<br />
declarã astfel: const char * str<br />
interpretat ca “pointer la un sir constant (nemodificabil)”. Exemplu:<br />
size_t strlen (const char * s);<br />
Cuvântul cheie const <strong>în</strong> fata unei declaratii de pointer cere compilatorului sã<br />
verifice cã functia care are un astfel de argument nu modificã datele de la acea adresã.<br />
Exemplu de functie care produce un mesaj la compilare:<br />
void trim (const char*s) { // elimina toate spatiile dintr-un sir dat<br />
char *p=s; // avertisment la aceasta linie !<br />
while (*s) {<br />
while (*s==' ') // sau: while (isspace(*s))<br />
++s;<br />
if (s==0) break;<br />
*p++=*s++;<br />
}<br />
*p=0;<br />
}<br />
Cum poate <strong>în</strong>sã compilatorul C sã verifice cã un pointer “const char * ” transmis<br />
unei alte functii nu este folosit <strong>în</strong> acea functie pentru modificarea datelor ?