Bueno, edito la respuesta:
Tal como planteas la función strcpy, estás copiando más elementos que la capacidad del array, que es de 20 char.
O sea, que aquí se podría producir el primer error. Eso lo puedes solucionar con la función strncpy, que te limita el nº de elementos a copiar.
Código C++:
Ver original#define TAM 20
int main() // Nivel 8 ej 1
{
char *p_md;
char nombre[TAM];
int longitud;
strncpy(nombre
, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", TAM
);
El otro error que podrías provocar es este:
Código C++:
Ver original#define TAM 20
int main() // Nivel 8 ej 1
{
char *p_md;
char* cadena= "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
p_md
= (char*)malloc(TAM
*sizeof(char));
//p_md = &nombre[0];
En el que asignas menos memoria de la necesaria para copiar "cadena".
En todo caso, estos errores significan que accedes o pisas memoria que no has reservado previamente, por lo que puede ser que estés accediendo/modificando memoria de otros programas o partes de tu programa con consecuencias indefinidas o desastrosas.
El hecho de que a veces "cuele"...es decir, que la memoria contigua a la que tenías esté sin uso, y por tanto aparentemente está todo bien no quiere decir que no hay error.