Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luis Ferreira

Copiar String

Recommended Posts

Olá pessoal, boa noite!


Estou com dificuldade em um exercício. Preciso solicitar uma string ao usuário e utilizando notação de ponteiros copiar essa string para outra. SEM UTILIZAR A BIBLIOTECA string.h .

Compartilhar este post


Link para o post
Compartilhar em outros sites


#include <stdio.h>

 

char*

string_copy (const char* source, char* destination)

{

while(*source != '\0')

*destination++ = *source++;

*destination = '\0';

 

return destination;

}

 

int

main (int argc, char** argv)

{

char s[256];

 

string_copy("Teste", s);

puts(s);

return 0;

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tecnicamente seu código funciona. Porém sua função string_copy tem um retorno sem utilidade.

 

 

 

 

  1. char* string_copy (const char* source, char* destination)
  2. {
  3. while(*source != '\0')
  4. *destination++ = *source++;
  5. *destination = '\0';
  6. return destination;
  7. }

 

Toda vez que vc passa um ponteiro como argumento pra alguma função, é como se vc estivesse passando este argumento por referência. Isso significa que qualquer alteração que vc fizer no argumento no escopo da função estaria na realidade alterando a variável passada como argumento. O ideal seria:

void string_copy (const char* source, char* destination)
{
    while(*source)
      *destination++ = *source++;
    *destination = '\0';
}

Somente isso já bastaria pra efetuar a cópia, isso levando em conta que a variável ponteiro passada pra destination já possui memória suficiente alocada pra efetuar a cópia.

 

Se vc quiser colocar tb a declaração da variável em notação de ponteiro, vc pode escrever assim

char *s = malloc(sizeof(char[256]));

No final, sua função main ficaria:

int main (int argc, char** argv)
{
    char *s = malloc(sizeof(char[256]));
    char *d = malloc(sizeof(char[256]));
    
    gets(s);
    string_copy(s, d);
    puts(d);
    
    free(s);
    free(d);

    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Tecnicamente seu código funciona. Porém sua função string_copy tem um retorno sem utilidade.

 

 

 

Toda vez que você passa um ponteiro como argumento pra alguma função, é como se você estivesse passando este argumento por referência. Isso significa que qualquer alteração que você fizer no argumento no escopo da função estaria na realidade alterando a variável passada como argumento. O ideal seria:

void string_copy (const char* source, char* destination)
{
    while(*source)
      *destination++ = *source++;
    *destination = '\0';
}

Somente isso já bastaria pra efetuar a cópia, isso levando em conta que a variável ponteiro passada pra destination já possui memória suficiente alocada pra efetuar a cópia.

 

Se você quiser colocar tb a declaração da variável em notação de ponteiro, você pode escrever assim

char *s = malloc(sizeof(char[256]));

No final, sua função main ficaria:

int main (int argc, char** argv)
{
    char *s = malloc(sizeof(char[256]));
    char *d = malloc(sizeof(char[256]));
    
    gets(s);
    string_copy(s, d);
    puts(d);
    
    free(s);
    free(d);

    return 0;
}

 

Neste contexto, sim, entretanto, esta função faz parte de um programa maior que escrevi.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.