Copy a word obtaining dynamic memory

3

I am trying to request that a word be entered and then create a new memory space to copy the word entered by the user there but I do not know how to do it.

I have this:

#include <string.h> // strlen, strcpy, strcmp, strcat
#include <stdio.h> // sprintf, scanf, ungetc, stdin

int main() {

   char palabra[100];

   printf("Palabra: "); 
   scanf("%s", palabra); // guardamos la palabra en el arreglo

   int tam = strlen(palabra); // me guarda el tamaño de la palabra ingresada

   printf("Escribiste: %s\n", palabra); // muestra la palabra

   printf("Tamaño arreglo: %d\n", tam); // muestra el tamaño

   // creamos memoria dinamica, y "nueva" apunta a la primer celda del arreglo
   char *nueva = new char[tam + 1];

   // creamos un puntero auxiliar para recorrer a "nueva" dejando la posibilidad 
      de acceder al primer caracter luego con el puntero "nueva" que ha quedado 
      intacto.
   char *aux = nueva;

   // creamos un puntero para recorrer el arreglo de la palabra ingresada
   char *p = palabra;

   // mientras el caracter de la celda del arreglo de palabra sea distinto a el 
      final de linea 
   while (*p != '\n') {
    // el contenido a donde apunta aux es modificado por el contenido de a donde 
      apunta p
      *aux = *p;

      aux++; // apuntamos a la siguiente celda del arreglo
      p++;
   }

   printf("Nueva palabra: %s\n", nueva); // mostramos la copia

   delete[] nueva; // liberamos memoria de la copia

   // la memoria del arreglo palabra se libera al finalizar el main() automaticamente

   return 0;
}

But it does not work like that.

In the comments I leave as is my reasoning when writing that code. And I make comments so that they correct me if I say something that shows that I am wrong in how I understand some things.

Greetings!

    
asked by Edu 27.03.2018 в 04:10
source

2 answers

3

In your code you indicate that you go through the character formation while the character of the cell is different from the end of line , but nowhere have you added the end of the line ( \n ) to the string that you are copying.

You can fix it like this:

// creamos memoria dinamica, y "nueva" apunta a la primer celda del arreglo
char *nueva = new char[tam + 1];
nueva[tam] = '\n';

Other things to consider.

You are tagging the question as

answered by 27.03.2018 / 10:20
source
2

The problem is the condition of the while. You have to change '\ n' to '\ 0'.

while (*p != '
while (*p != '%pre%') // '%pre%' es el fin de cadena
{
    // el contenido a donde apunta aux es modificado por el contenido de a donde apunta p
    *aux = *p;

    aux++; // apuntamos a la siguiente celda del arreglo
    p++;
}
*aux = '%pre%'; // Finalizar correctamente la palabra nueva con el caracter nulo
') // '%pre%' es el fin de cadena { // el contenido a donde apunta aux es modificado por el contenido de a donde apunta p *aux = *p; aux++; // apuntamos a la siguiente celda del arreglo p++; } *aux = '%pre%'; // Finalizar correctamente la palabra nueva con el caracter nulo
    
answered by 27.03.2018 в 04:18