vale entonces, si yo marco como longitud por ejemplo 10 caracteres, y le paso una cadena de 50 caracteres, los unicos caracteres que 100% seguro guardara bien serian los 10 primeros no? y nadie me asegura que pueda acceder a los 40 caracteres restantes durante el programa ya que quizas se han sobreescrito o algo asi.
es este el razonamiento?
y respecto a lo del VLA, en el ejemplo que dan en wikipedia:
float read_and_process(int n)
{
float vals[n];
for (int i = 0; i < n; i++)
vals[i] = read_val();
return process(vals, n);
}
definen la longitud de la cadena, aunque esta dependa de n. en el caso que os he comentado, yo le doy una longitud de 5 y en cambio me deja pasarle mas caracteres, asi que no veo que sean cosas iguales. si esto no es asi, por favor explicadme el por que ya que veo que son casos distintos.
gracias a los 2!
EDIT: edito para decir que ya encontre la respuesta. por si a alguien le interesa, no llevar un control sobre la memoria asignada a un programa puede provocar esto:
http://es.wikipedia.org/wiki/Desbordamiento_de_búferllevo un rato mirando y para evitar que se sobrepase la longitud de la cadena se podria hacer algo asi:
#include <stdio.h>
#include <stdlib.h>
#define MAX 8 /*longitud de la cadena*/
int main() {
char *pa;
pa
=(char*)malloc(MAX
*sizeof(char));
if (pa==0) {
printf("ERROR - No hay memoria disponible.\n"); } else {
printf("Introduce una cadena de maximo %d caracteres:\n",MAX
-1); /*MAX-1 para dejar el caracter de fin de cadena \0*/
if ((int)*(pa+MAX-1)!=0) {
printf("ERROR - Excediste los %d caracteres permitidos.\n",MAX
-1); } else {
}
}
return 0;
}
gracias de nuevo!