Cuando se tiene una colección de datos (array o similares) hay dos conceptos parecidos pero diferentes: size y capacity.
- size -> Indica el número de elementos que contiene la colección
- capacity -> Indica el máximo número de elementos que puede contener la colección
Es un problema común cuando se recorre una colección, utilizar la condición (i < capacity) en vez de (i < size). En tu caso concreto parece que la variable j corresponde a capacity y la variable p corresponde a size (excepto cuando haces p=0 al mostrar). Corrige eso un poco y lo tendrás (usa siempre que puedas nombres descriptivos, esto no es necesario para los contadores de un for: i, j, k...; pero sí siempre que esas variables las uses para más cosas)
PD: No le encuentro sentido a la función memset() que utilizas.
Por otro lado te dejo algunos consejos extra:
- Las cadenas de caracteres se recomienda leerlas con fgets() en vez de scanf(). En este foro hay muchos temas al respecto, puedes utilizar el botón de "Buscar" para encontrarlos.
- Utiliza constantes para los valores predefinidos y evita siempre que sea posible escribir números directamente en el código. Así será más fácil entender por qué hay un 10 por ahí y no es un 15 por ejemplo.
Código
Así si en un momento dado quieres cambiar alguno de esos valores, sólo tendrás que cambiarlo en un sitio y no en todas las líneas donde lo usas.
const int MAX_ELEMENTOS = 10; const int MAX_LONGITUD_ELEMENTO = 100; int main() { ... }
Se puede mejorar alguna cosa más pero con esos dos puntos creo que ya se notará una mejora considerable.
Suerte