strcpy(s,lookup(line)); After gdb: Program received signal SIGSEGV, Segmentation fault. __strcpy_ssse3 () at ../sysdeps/i386/i686/multiarch/strcpy-ssse3.S:84 I would look for another way, for example: // copy line to new string char* temp = malloc(strlen(line) + 1); if(temp == NULL) { free(temp); return false; } strcpy(temp, line); i don't know how is possible to resolve server without using gdb, this is a fundamental skill that you have to learn. I also do not know what you intend to use lookup, if only returns a string with the MIME type of file, you have to analyze line and see that it fulfills the specifications EDIT Come to lookup a pointer question: `const char* lookup(const char* path), means that lookup, receives a constant pointer, really it means that we have a string, which already exists and will not change, there is no need to malloc, calloc or realloc; **const char * path** means I have a pointer to the start of the string path, but can also access each and every one of his characters. We stopped for a moment before writing code _"I just need to find a characteristic of path, that is useful to me to determine the file extension"._ if you look a time all file extensions have a point: '.' and now we see a little problem specifications suggest us use features like strcasecmp, strcpy, and / or strrchr, it is our duty to learn to use them. char * strrchr (const char * s, int c); It is perfect for us, returns a pointer to the last occurrence of the character c in the string s. We have function (strrchr), we have the character we want( a point) and we have a constant string ( const char* path). therefore we can do: char * point = strrchr (path, '.'); // Returns a pointer to the character point point is a string (char *), so if exists point we have a chain that begins in that character, ie if path ends with .html point is precisely ".html" exactly what we want. Now we can use a very useful function in this case strcasecmp, our chain point, and a lot of IF conditions, I think this is enough to start.