Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

JoaoSkate

[Dúvida] Definir funçao semelhante strlen, mas com ponteiros

Recommended Posts

JoaoSkate

Olá boa noite,

Estou aqui com um problema em definir a "minha própria " strlen , usando ponteiros, o código até compila mas depois dá-me segmentation fault, se alguem me puder dar uma ajuda a descobrir o meu problema, agradecia.

#include <stdio.h>
#include <string.h>
int strlen_ponteiros(char *v);    /*<----- prototipo da funcao*/

int main()
{
char *palavra=NULL;   /*como nao sei o tamanho certo da palavra que vai ser introduzida, crio um vetor com 100 posiçoes*/

printf("Introduza uma palavra:");
scanf("%s",palavra);

printf("Tamanho da string usando strlen_indices: %d\n",strlen_ponteiros(palavra));
printf("Tamanho da string usando strlen: %d\n",(int) strlen(palavra));  /* teste para ver se dá igual*/

return 0;

/*nota: strlen nao conta com o '\0'*/
}

int strlen_ponteiros(char *v){   /*<------funcao*/
int i;
char *ptr=v;
for(i=0 ; *(ptr+i)!='\0' ; i++);  

return i;
}

Edited by JoaoSkate

Share this post


Link to post
Share on other sites
paulolz

Olá, JoãoSkate!

O erro é porque você declarou um ponteiro para char e não alocou memoria para ele. Para resolver você deve apontar o ponteiro chamado palavra para um vetor de char estático ou alocar memoria com malloc

A solução seria mais ou menos assim oh

1) Declarar um vetor de char

char vetorChr[200], *palavra;

palavra = vetorChr; // agora o ponteiro palavra tá apontando para o vetor de char

2) Alocar memoria

char *palavra = malloc(sizeof(char) *200);

Share this post


Link to post
Share on other sites
JoaoSkate

Olá, JoãoSkate!

O erro é porque você declarou um ponteiro para char e não alocou memoria para ele. Para resolver você deve apontar o ponteiro chamado palavra para um vetor de char estático ou alocar memoria com malloc

A solução seria mais ou menos assim oh

1) Declarar um vetor de char

char vetorChr[200], *palavra;

palavra = vetorChr; // agora o ponteiro palavra tá apontando para o vetor de char

2) Alocar memoria

char *palavra = malloc(sizeof(char) *200);

Obrigado, pela ajuda, entretanto resolvi da seguinte forma e está a funcionar:

#include <stdio.h>
#include <string.h>
int strlen_ponteiros(char *v);

int main()
{
char palavra[100];

printf("Introduza uma palavra:");
scanf("%s",palavra);

char *ptr_palavra=palavra;

printf("Tamanho da string \"%s\" usando strlen_ponteiros: %d\n",palavra,strlen_ponteiros(ptr_palavra));
printf("Tamanho da string \"%s\" usando strlen: %d\n",palavra,(int) strlen(palavra));  /* teste para ver se dá igual*/

return 0;

/*nota: strlen nao conta com o '\0'*/
}
int strlen_ponteiros(char *v){
int i;

for(i=0 ; *(v+i)!='\0' ; i++);	 /* *(v+i) : conteudo da primeira posiçao do "vetor" v mais 'i' saltos*/

return i;
}

no entanto ainda vou entar usar o malloc, para nao estar a utilizar memoria desnecessariamente. Obrigado pela dica

Share this post


Link to post
Share on other sites
HappyHippyHippo

duas coisas:

- a leitura de uma string para um buffer deverá sempre considerar o tamanho desse buffer:

char palavra[100];
scanf("%99s", palavra);

- usar o malloc não te resolverá o "uso de memória desnecessária". para perceber porquê, pensa : sabes quanta memória necessitas de reservar antes de pedir a palavra ?

ps : a tua função poderia ser optimizada

Edited by HappyHippyHippo
  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.