[C]Erro função

Ruanes

Power Member
Oi, estou a aprender umas coisas com funções e tenho um erro no seguinte codigo:
Código:
char StrCat(char *destino,char *origem)
{
while (*origem!='\0')
{
*origem++;
}
while (*destino)
{
*origem=*destino;
*destino++;
*origem++;
}
*destino='\0';
return (*destino);
}

o objectivo deste codigo é que ele faça o mesmo que a função strcat().

o problema é que ele apresenta-me a segunda string(destino) e nao as duas strings juntas.

Sou novo nisto por isso isto é capas de ter uns poucos de erros.
 
Oi, estou a aprender umas coisas com funções e tenho um erro no seguinte codigo:
Código:
char StrCat(char *destino,char *origem)
{
while (*origem!='\0')
{
*origem++;
}
while (*destino)
{
*origem=*destino;
*destino++;
*origem++;
}
*destino='\0';
return (*destino);
}
o objectivo deste codigo é que ele faça o mesmo que a função strcat().

o problema é que ele apresenta-me a segunda string(destino) e nao as duas strings juntas.

Sou novo nisto por isso isto é capas de ter uns poucos de erros.

Será impressão minha ou estas a fazer *origem=*destino??! é que assim estas a alterar so a origem... mas posso ter percebido mal... é que no fim estas a retornar *destino, que simplesmente nao foi alterado.
 
Estive a fazer debug ao teu código, e cheguei a isto:
o teu código essencialmente está ao contrário, tu enfias o destino na origem,
*origem = *destino, o que deveria ser ao contrário.
segundo ponto: a tua função irá retornar um ponteiro para caracteres, e não para um caracter, como tinhas.
terceiro ponto: estavas a retornar um ponteiro que já só apontava para o '\0'.portanto para resolveres isto vais ter de guardar no inicio o endereço do vector destino ;)

caso necessites MESMO, caso não percebas muito bem como resolver, só em caso extremo, tá aqui o código modificado, mas lembra-te, se não fores tu a fazer, nunca vais conseguir.

Código:
char *StrCat(char* destino,char* origem)
{
  char * paraRetorno = destino;
  while ((*destino) != '\0')
  {
    destino++;
  }
  while (*origem != '\0')
  {
    *destino=*origem;
    destino++;
    origem++;
  }
  *destino='\0';
  return paraRetorno;
}
 
tens ai alguns erros. na função strcat original a primeira variavel é que vai ser alterado, concatenando-se o valor da 2ª variavel.

ou seja estás fazer isso ao contrário. basta trocares apenas dentro dos ciclos, onde tem origem pões destino e vice-versa (incluindo nas condições dos while)

além disso, a função strcat retorna um ponteiro para o primeiro valor da variável alterado. o que tu estás a fazer é retornar o ultimo caracter (em vez do endereço de memória) da variavel que não foi alterada. ainda por cima esse caracter é nulo.

tens que adicionar o "*" na declaração da função. e armazenar previamente o endereço inicial da variavel alterado, para depois retornar esse mesmo endereço. ou então crias um contador e em vez de incrementar directamente o endereço, incrementas o contador

EDIT: adiantaram-se... :P
tool, esse spoiler correu-te um bocado mal não?
 
Back
Topo