char*Catalogue = (char*)malloc(sizeof(char*)*10);
I already told you to not cast what malloc() returns and don't allocate memory dynamically unless you have to.
sizeof(char*) is evaluated at compile time and is probably 4 on your system so you're allocating space for 40 chars
every time you run. Since the size is small (fits on the stack nicely) and is probably always the same unless you move
between 32-bit and 64-bit systems, I suggest allocating on the stack.
Next error is that you tell scanf to look for a string with "%s", but instead of passing it a pointer-to-char (Catalogue), you
pass it the address of Catalogue (effectively pointer-to-pointer-to-char), so no wonder it segfaults. Compile with all warnings turned on and the compiler would most likely complain that the format string doesn't match the variable. Errors like that are
begging for trouble.
scanf("%s", buffer); /* Fragile, we may type more than 39 chars */
Oh yeah, you probably want to skip scanf() altogether and use fgets() or something like rjlee suggested. When I code in C, the programs are usually not the kind that reads user input from the keyboard so I'm a bit weak in that department. But everything else I said holds true.