Ir ao conteúdo
  • Cadastre-se

uso de strstr


Liliane Barboza

Posts recomendados

Preciso de uma ajuda com essa função, estou usando strstr para verificar a existencia de uma substring em uma string,mas dá erro quando a main chama a função,o programa para de executar após esses printf e scanf da função.
o vetor que ela recebe está ok,bibliotecas também,se alguém souber qual é o erro!
 
//E-dado um apartamento, exibe o código da garagem compradavoid vagaadquirida(char garagem[400]){int x;    char apto[10];    char *pt[10];        printf("\n Para verificar vaga adquirida\n");printf("\n Qual numero do apartamento:\n");    scanf("%s",apto);    for(x=0;x<400;x++){     *pt=strstr(garagem[x],apto);if(*pt != NULL) {        printf ("%s ",strstr (garagem[x],apto));           }        }                       }

 

Link para o comentário
Compartilhar em outros sites

strstr devolve um ponteiro que quer dizer justo onde começa a substring que você buscou dentro de um string. Si tenho "Ola mundo" e busco "mundo" str vai devolver um ponteiro justo onde começa "mundo" ou seja 'm'.

Para você ter uma ideia:

#include <stdio.h>int main () {    char frase[] = "Alo mundo";    char palavra[] = "mundo";    char *ponteiro = NULL;    ponteiro = strstr ( frase, palavra );    printf ( "%s\n", ponteiro );    return 0;}

Em um ponteiro si por * adiante de atribuir um valor que não seja na hora de declarar, quer dizer que você esta mudando o valor da variável que aponta. Exemplo:

#include <stdio.h>int main () {    char var = '0';        char *ptr = NULL;    ptr = &var;        *ptr = 20;        //Ambos imprimen var    printf ( "var: %d\n", var );    printf ( "ptr: %d", *ptr ); //porem ptr imprime var indiretamente        return 0;}

Como você pode ver na linha  9, por o caracter '*' adiante do ponteiro, quer dizer que eu quero mudar o valor de var e não acomodar a direção do ponteiro. No seu exemplo *pt=strstr(garagem[x],apto) esta mal. Para saber si encontrou a palavra os passos são:

1ºcriar um ponteiro do tipo char

2ºEsse é muito importante!!! Atribuir NULL ao ponteiro, si não ele vai apontar a alguma coisa devido ao "lixo" da memoria. Isso é até perigoso.

3º buscas a palavra e atribuis o valor de retorna de strstr ao ponteiro como no meu exemplo la em cima.

4ºchecar com if si o ponteiro continua sendo nulo, ou mudou devido a que encontrou a palavra desejada.

 

O exemplo mais ou menos completo é:

#include <stdio.h>#include <string.h>int main () {    char frase[] = "Alo mundo";    char palavra[] = "mundo";    char *ponteiro = NULL;    ponteiro = strstr ( frase, palavra );        if ( ponteiro ){        printf ("Encontrado");            }else{        printf ( "=(");            }    //si quer buscar outra palavra volte a por o ponteiro a NULL        return 0;}
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!