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

brink@ero

Acho que é isto:

warning C4700: local variable 'ptr' used without having been initialized

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

Cumpr. brink@ero  :smoke:

Link to comment
Share on other sites

brink@ero

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

brink@ero

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

tipo mas quando da funçao strcat passa para o str copy o dest leva o dest+strlen(dest) ou seja o parametro de rececpao de dest na funcao strcat n vai ser o '\0' de tiago ?

como é que o dest vai retornar tiago se vai para la em '\0'?

Link to comment
Share on other sites

Só um aparte, Gurzi, acho que usas o Dev-C++, vai a Tools, Compiler options, "Add the following commands when calling the compiler" -Wall

Link to comment
Share on other sites

sem -Wall, um exemplo típico, se declarares uma variável que não uses, nada acontece, com -Wall, ele imite um Warning.

O programa corre, mas és avisado do facto.  (programação incorrecta)

Existem mais exemplos, este é o mais básico e todos compreendem.

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.