Jump to content

Concatenar Strings


Gurzi
 Share

Recommended Posts

Bem isto estáme a dar um erro de memória porque ele compila mas quando entro os dois inputs aparece logo erro do windows a dizer que a Aplicação vai ter que encerrar..

alguem com bom olho por favor?

#include <stdio.h>
#include <stdlib.h>

int strlen(char *s)
{
  char *ptr;
  while (*s !='\0')
  s++;
  return (int) (s-ptr);
}

char *strcopy(char *dest,char *orig)
{
  char *ptr=dest;
  while (*dest++=*orig++)
  ;
  return ptr;
}

char *strcat(char *dest,char *orig)
{
strcopy(dest+strlen(dest),orig);
return dest;
}

main()
{
  char orig[40];
  char dest[30];
  
  printf("Introduza o Seu nickname \n");
  gets(dest);
  printf("Introduza o Seu Clan \n");
  gets(orig);
  printf("A Sua tag será : %s",strcat(dest,orig));
  getchar();
}

😁

Link to comment
Share on other sites

ups, faltava me o *ptr =s ;

esse compilador detecta tudo, o meu não disse nada weird :\

Bem, eu usei o VC++, é o que tenho aqui.

Com ele vi os warnings e depois de executar passo-a-passo vi que crashou nesse mesmo sítio.

Mas com o gcc, se colocares -Wall, ele devia-se queixar.

Agora executar passo-a-passo, já não me lembro  ? só com o emacs à frente. (sim eu uso o emacs  :fartnew2:)

cumpr. brink@ero

Link to comment
Share on other sites

brinkaero surgiume aqui uma dúvida que me está a confundir a cabeça...

char *strcat(char *dest,char *orig)

{

strcopy(dest+strlen(dest),orig);

return dest;

}

imagina dest=tiago , orig = ola

aqui ele vai passar para strcopy o '\0' de tiago ou seja no strcopy vai receber o '\0' de tiago

char *strcopy(char *dest,char *orig)

{

  char *ptr=dest;

  while (*dest++=*orig++)

  ;

  return ptr;

}

aqui o ptr vai ser igual á posiçao de memoria de '\0' de tiago..

depois é feita a atribuiçao dali para a frente...

se ptr está a apontar para '\0' como é que o output final é de tiagoola ?

nao entendo

Link to comment
Share on other sites

brinkaero surgiume aqui uma dúvida que me está a confundir a cabeça...

char *strcat(char *dest,char *orig)

{

strcopy(dest+strlen(dest),orig);

return dest;

}

imagina dest=tiago , orig = ola

aqui ele vai passar para strcopy o '\0' de tiago ou seja no strcopy vai receber o '\0' de tiago

char *strcopy(char *dest,char *orig)

{

  char *ptr=dest;

  while (*dest++=*orig++)

  ;

  return ptr;

}

aqui o ptr vai ser igual á posiçao de memoria de '\0' de tiago..

depois é feita a atribuiçao dali para a frente...

se ptr está a apontar para '\0' como é que o output final é de tiagoola ?

nao entendo

Muito simples, como disseste o ptr está a apontar para '\0' e depois é feita a atribuiçao dali para a frente...

Assim a partir do '\0' tu escreves ola. O o ocupa a posição do '\0', o l a seguinte e o a a posição a seguir.

O return ptr devolve a string "ola" que não utilizas para nada na função strcat.

Esta por sua vez devolve o apontador dest. Este apontador está a apontar para o "t" do tiago, e quando fazes o printf, o compilador imprime todos os char até encontrar o '\0'.

Como substituíste o '\0' que se encontrava no fim da palavra tiago pela palavra "ola" + '\0', o output é tiagoola!

Espero ter exclarecido, cumpr. brink@ero ?

Link to comment
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
 Share

×
×
  • Create New...

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.