Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gabriel Moraes

[Resolvido] Pointers

Recommended Posts

então galera,

estou começando a trabalhar com ponteiros

e como exercicio presciso criar funções iguais

a strlen() e strcat() utilizando ponteiros,

 

então fiz o seguinte código:

 

#include <stdio.h>

void StrLen(char *leitura, int *count)
{
    for(;*leitura;*count++);
}

int main()
{
    char sVar1[100];
    int iVar1 = 1;
    gets(sVar1);
    StrLen(sVar1, iVar1);
    printf("\n\n\t%i", iVar1);
    return(0);
}

só que no programa ao digitar a palavra

para receber o inteiro resultante, o programa não retorna nada e o compilador

da o seguinte warning

"|14|warning: passing argument 2 of 'StrLen' makes pointer from integer without a cast|"

 

alguem sabe o que isso significa?

o que estou fazendo de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na sua implementação da strlen(), você recebe um inteiro que, se entendi direito, deve ter seu valor mudado para o comprimento do array de caracteres. O warning é porque você passa um inteiro no lugar de um endereço (iVar1 ao invés de &iVar1).

 

Coincidentemente, sizeof(int) == sizeof(int *). O compilador considera que você está passando um endereço armazenado como valor inteiro na variável inteira iVar1. Isso vai gerar segmentation faults.

 

Você deve chamar a função assim:

 

StrLen(sVar1, &iVar1);

Outra coisa... sua função de contagem tá errada. Tenta entender o que tá acontecendo nesse for ;)

 

Se não conseguir resolver, posta aqui que eu te ajudo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, eu vi agora,

realmente o for está com problema mesmo

fiz diversos testes, com for e while

mais não consegui...

vou tentar explicar o que imaginei,

por favor me corrija se necessário

 

for(;*leitura;*count++);

• cortei a inicialização, já que iVar1, e inicializada dentro de main.

• coloquei *leitura imaginando que o for seria repetido até que o caractere \0 fosse encontrado, ou seja o final da string, seguindo alguns casos que aconteceu e que entendi do curso.

• e coloquei *count++ para incrementar iVar1 toda vez que um novo caractere fosse encontrado...

 

infelizmente não encontrei de forma alguma o meu erro.

conseguiria facilmente substituir o *count por uma variavel ao inves de ponteiro

mais pediram pra fazer com esses ponteiros...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora sim amigo,

depois de horas e horas deparei com um erro bobo

reparei que o for estava testando somente a mesma letra da string,

já que o for apenas acrescentava um numero ao count e não mudava a letra em que era testada leitura

então o for final ficou assim

for(*conta=0;*leitura!='\0';*leitura++) *conta+=1;
estou postando pois pode ser útil para quem prescisar!

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.