Alocacion dinamica de memoria; String, ¿Que estoy haciendo mal?

Iniciado por astinx, 2 Junio 2012, 04:33 AM

0 Miembros y 1 Visitante están viendo este tema.

astinx

Hola, me ha ocurrido algo muy particular, miren el siguiente programita:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv)
{
char * string = (char*) malloc (sizeof(char)*11);
string[0]='q';
string[1]='w';
string[2]='e';
string[3]='a';
string[4]='s';
string[5]='d';
string[6]='z';
string[7]='x';
string[8]='c';
string[9]='r';
string[10]='f';
string[11]='v';
printf("%s\n",string);
printf("%d\n",strlen(string));
return 0;
}


¿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.
La programación hoy en día es una carrera entre los ingenieros de software intentando construir mejores y más eficientes programas a prueba de idiotas y el Universo intentando producir mejores y más grandes idiotas. De momento, el Universo está ganando

x64core

, ¿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.

astinx

La programación hoy en día es una carrera entre los ingenieros de software intentando construir mejores y más eficientes programas a prueba de idiotas y el Universo intentando producir mejores y más grandes idiotas. De momento, el Universo está ganando