Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Utilizzo di strstr()

22 views
Skip to first unread message

Alter

unread,
May 3, 2013, 4:59:01 AM5/3/13
to

Salve

St� provando ad utilizzare la funzi�ne strstr(), per trovare dei token
anche identici, presenti in una stringa.

Ho trovato degli esempi in rete, ma ho notato che trova solo 1 token, e non
trova il secondo che e uguale al primo!

char *yourText = "213 File status 550 Access Denied. 550 Access Denied.";

char *found = strstr(yourText, "550 Access Denied");

printf("STEP1=%s\n",found);

if(found != NULL && strstr(found+1, "550 Access
Denied"))printf("STEP2=%s\n",found);

Nello step2, dovr�bbe essere solo visualizzato: 550 Access Denied.?

Allora, strstr(), serve solo per trovare un token, �ppure e possibile
trovare anche un secondo token?

Ciao













Andrea D'Amore

unread,
May 3, 2013, 5:11:24 AM5/3/13
to
In article <51837c90$0$1340$4faf...@reader2.news.tin.it>,
"Alter" <n...@alt.invalid> wrote:

> if(found != NULL && strstr(found+1, "550 Access
> Denied"))printf("STEP2=%s\n",found);
>
> Nello step2, dovrèbbe essere solo visualizzato: 550 Access Denied.?

Nò, dato che stai passando la variabile found a printf() il cui
contenuto è lo stesso che al printf() precedente e quindi ottieni la
stessa uscita.

> Allora, strstr(), serve solo per trovare un token, óppure e possibile
> trovare anche un secondo token?

A riguardo la descrizione di strstr() dal manuale mi sembra chiarissima,
la prima frase della descrizione è
"The strstr() function locates the first occurrence of the
null-terminated string s2 in the null-terminated string s1"

Ovviamente è possibile trovare tutti le altre sottostringhe, ti sposti
avanti nella stringa da cercare e cerchi di nuovo la prima sottostringa
e d'altronde tu stesso hai fatto proprio così nel codice, il solo fatto
di avere due stringhe in uscita vuol dire che ha trovato anche il
secondo "token".

Alter

unread,
May 3, 2013, 5:43:53 AM5/3/13
to
A m� pare sia sempre il primo token.

Perche parte sempre dalla st�ssa posizione.

con un printf("%d\n",found-yourText+1); sia dopo il primo step, che il
secondo, il risultato sia sempre lo stesso numero: 17.

Ciao




Giacomo Degli Esposti

unread,
May 3, 2013, 6:03:59 AM5/3/13
to
Il giorno venerdì 3 maggio 2013 10:59:01 UTC+2, Alter ha scritto:
>
> if(found != NULL && strstr(found+1, "550 Access Denied")) printf("STEP2=%s\n",found);
>
> Nello step2, dovr�bbe essere solo visualizzato: 550 Access Denied.?

No, perche il valore di found NON cambia durante la seconda chiamata
a strstr. Prova con:

if(found!=NULL)
{
found = strstr(found+1, ....)
if (found !=NULL)
printf(...)
}


ciao
Giacomo

enoquick

unread,
May 3, 2013, 8:51:32 AM5/3/13
to
Il 03/05/2013 03:59, Alter ha scritto:
> Salve
>
> Stò provando ad utilizzare la funzióne strstr(), per trovare dei token
> anche identici, presenti in una stringa.
>
> Ho trovato degli esempi in rete, ma ho notato che trova solo 1 token, e non
> trova il secondo che e uguale al primo!
>
> char *yourText = "213 File status 550 Access Denied. 550 Access Denied.";
>
> char *found = strstr(yourText, "550 Access Denied");
>
> printf("STEP1=%s\n",found);
>
> if(found != NULL && strstr(found+1, "550 Access
> Denied"))printf("STEP2=%s\n",found);
>
> Nello step2, dovrèbbe essere solo visualizzato: 550 Access Denied.?
>
> Allora, strstr(), serve solo per trovare un token, óppure e possibile
> trovare anche un secondo token?
>
> Ciao
>
>
>

In effetti si, serve per trovare la prima occorrenza e basta
Per trovare altre occorrenze occorre incrementare il puntatore ricevuto
in uscita della lunghezza della stringa cercata e ripetere il ciclo
fino a quando non si ottiene NULL



Ekua

unread,
May 3, 2013, 11:05:56 AM5/3/13
to

Oppure m�ttendo a null il puntatore, e passandogli una nuova
sottostringa/token da cercare.


Ciao




Andrea D'Amore

unread,
May 3, 2013, 11:12:24 AM5/3/13
to
In article <5183d258$0$37130$4faf...@reader1.news.tin.it>,
"Ekua" <n...@spam.mail> wrote:

> Oppure méttendo

E qua la lancetta del trollometro sfonda il pernetto di sicurezza del
fondo scala.


"Non incrociate i flussi, sarebbe male" (cit.)

enoquick

unread,
May 3, 2013, 11:19:04 AM5/3/13
to
Il 03/05/2013 10:05, Ekua ha scritto:
> Oppure méttendo a null il puntatore, e passandogli una nuova
> sottostringa/token da cercare.
>
>
> Ciao
>
>
>
>

Non credo che la tua risposta abbia senso rispetto al problema sollevato

Vincenzo Mercuri

unread,
May 3, 2013, 12:53:05 PM5/3/13
to
Il 03/05/2013 17:12, Andrea D'Amore ha scritto:
[..]
>
> "Non incrociate i flussi, sarebbe male" (cit.)
>

dal film "Trollbusters" (1984),
sottotitolo: "Mèttiamo l'accentò ùn po dovè capìta"

--
Vincenzo Mercuri

Giacomo Degli Esposti

unread,
May 6, 2013, 10:38:08 AM5/6/13
to
Il giorno venerdì 3 maggio 2013 17:12:24 UTC+2, Andrea D'Amore ha scritto:
>
> "Non incrociate i flussi, sarebbe male" (cit.)

"Faccio sempre confusione tra bene e male: che intendi con male?"

(scusate l'OT, ma non riesco a resistere... :)

ciao
Giacomo
0 new messages