Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: astinx en 2 Junio 2012, 04:33 am



Título: Alocacion dinamica de memoria; String, ¿Que estoy haciendo mal?
Publicado por: astinx en 2 Junio 2012, 04:33 am
Hola, me ha ocurrido algo muy particular, miren el siguiente programita:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(int argc, char** argv)
  6. {
  7. char * string = (char*) malloc (sizeof(char)*11);
  8. string[0]='q';
  9. string[1]='w';
  10. string[2]='e';
  11. string[3]='a';
  12. string[4]='s';
  13. string[5]='d';
  14. string[6]='z';
  15. string[7]='x';
  16. string[8]='c';
  17. string[9]='r';
  18. string[10]='f';
  19. string[11]='v';
  20. printf("%s\n",string);
  21. printf("%d\n",strlen(string));
  22. return 0;
  23. }

¿Porque imprime que la longitud del string en de 15, si aloque memoria para 11 elementos?
¿Porque imprime garbage en el ultimo carácter?

Se que se solucionaria agregando un '\0' al final, ¿pero C no lo agrega automaticamente al alocar la memoria?.

Disculpen mi ingenuidad, se que debe ser algo muy basico y gracias por detenerse a leer.


Título: Re: Alocacion dinamica de memoria; String, ¿Que estoy haciendo mal?
Publicado por: x64core en 2 Junio 2012, 04:41 am
Código:
, ¿pero C no lo agrega automaticamente al alocar la memoria?.
en tu mismo codigo te das cuenta que no lo hace, es tu respondabilidad agregarlo

ademas recordar que ahí estas usando 12 elementos y solo reservaste memoria para 11 eso sin contar el caracter nulo que debe
de haber si queres que sea una cadena ANSI.


Título: Re: Alocacion dinamica de memoria; String, ¿Que estoy haciendo mal?
Publicado por: astinx en 4 Junio 2012, 02:15 am
Muchas gracias por tu respuesta :).