1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[C]Erro função

Discussão em 'Programação' iniciada por Ruanes, 20 de Junho de 2008. (Respostas: 5; Visualizações: 663)

  1. Ruanes

    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.
     
  2. arconada

    arconada Power Member

    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.
     
  3. Ruanes

    Ruanes Power Member

    entao como e que altero o destino???
     
  4. tool

    tool Power Member

    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;
    }
     
  5. Ruanes

    Ruanes Power Member

  6. MPalhas

    MPalhas Power Member

    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?
     

Partilhar esta Página