Ce face strchr și strrchr
strchr(s, c) parcurge șirul de la început și întoarce un pointer la primul caracter egal cu c. Dacă nu îl găsește, întoarce NULL. strrchr face același lucru, dar întoarce ultima apariție.
Pointerul întors arată în interiorul șirului inițial. Poziția (indicele) se obține prin scădere: p - s. Textul de după caracter este chiar p + 1.
Caracterul căutat este un singur octet. Nu poți căuta o literă cu diacritice în UTF-8 (are 2 octeți) cu strchr; pentru asta folosește strstr(s, "ș").
Parametri
| Parametru | Descriere |
|---|---|
s |
Șirul în care cauți. |
c |
Caracterul căutat, de exemplu '@'. Căutarea lui '\0' întoarce pointer la terminator. |
Ce returnează
Pointer la caracterul găsit sau NULL.
Exemple
Exemplul 1: Domeniul unei adrese de e-mail
#include <stdio.h>
#include <string.h>
int main(void) {
const char *email = "ana.pop@exemplu.ro";
const char *aron = strchr(email, '@');
if (aron != NULL) {
printf("Utilizator: %.*s\n", (int)(aron - email), email);
printf("Domeniu: %s\n", aron + 1);
}
return 0;
}
Rezultat
Utilizator: ana.pop
Domeniu: exemplu.ro
Exemplul 2: Extensia unui fișier cu strrchr
Numele are două puncte; extensia începe după ultimul, deci strrchr este funcția potrivită.
#include <stdio.h>
#include <string.h>
int main(void) {
const char *fisiere[] = {"raport.final.pdf", "poza.jpg", "README"};
for (size_t i = 0; i < 3; i++) {
const char *punct = strrchr(fisiere[i], '.');
printf("%-18s -> %s\n", fisiere[i], punct ? punct + 1 : "(fără extensie)");
}
return 0;
}
Rezultat
raport.final.pdf -> pdf
poza.jpg -> jpg
README -> (fără extensie)
Greșeli frecvente
- Folosești rezultatul fără să verifici
NULL: dacă textul nu conține caracterul,p + 1sau*popresc programul. - Modifici șirul printr-un pointer întors de
strchrpe un literal ("text"). Literalii șir nu au voie să fie modificați.
Comenzi înrudite
strstr: Caută prima apariție a unui subșir într-un șir și întoarce un pointer la ea sau NULL.strtok: Împarte un șir în bucăți (tokeni) după unul sau mai multe caractere separatoare, modificând șirul original.strlen: Numără caracterele unui șir C până la terminatorul ‘\0’, fără să-l includă.Aritmetica pointerilor: Adunarea și scăderea pe pointeri se fac în elemente, nu în octeți: p + 1 arată spre următorul element din tablou.
Întrebări & Exemple de Cod:
strchr și strrchrAi o nelămurire despre utilizarea comenzii
strchr și strrchrsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.