Jump to content

Recommended Posts

Posted

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();
}

😁

Posted

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:

Posted

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

Posted

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

Posted

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 ?

Posted

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'?

Posted

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.

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
×
×
  • 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.