Oi, estou a aprender umas coisas com funções e tenho um erro no seguinte codigo:
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.
arconada
20-06-2008, 20:11
Oi, estou a aprender umas coisas com funções e tenho um erro no seguinte codigo:
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.
entao como e que altero o destino???
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.
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 (http://www.techzonept.com/member.php?u=26464), esse spoiler correu-te um bocado mal não?