## Developers' Forum

### strdup not in string.h?

by Emmanuel Lazard -
Number of replies: 2

Hello and thanks for CodeRunner which I've started using with my students.

It seems that the strdup() function, although available in the library, is NOT defined in string.h.

__tester__.c: In function ‘main’:
__tester__.c:8:16: error: implicit declaration of function ‘strdup’; did you mean ‘strcmp’? [-Werror=implicit-function-declaration]
char * p = strdup("7\n6\n8\n2\n");

Can it be because it's not a ISO C function but a POSIX One?

Regards

### Re: strdup not in string.h?

by Richard Lobb -

By default Jobe runs C tasks as C99. See https://github.com/trampgeek/jobe#run_spec-parameters, and strdup is not part of the C99 standard. There are various solutions, such as the following (all untested - caveat emptor):

1. If it's just for one question, and it's a write-a-function question you can change the template to include the line
#define _POSIX_C_SOURCE 200809L

before the #include of string.h
2. Tell the students to add that line to their code.
3. Or tell the students to simply declare the function themselves instead, e.g.
char* strdup(const char*);
4. Customise the question and (under advanced customisation) set the sandbox parameters to define a different compileargs value, e.g. {"compileargs": ["-Wall", "-Werror", "-std=gnu++0x", "-x c"]}
5. Change the base prototype for the C questions to use the above sandbox parameters. [Not recommended, as you'll have to re-do it whenever CodeRunner is upgraded. And you need to be a Moodle admin to see the base prototypes.]
6. Define your own question types with names like c_program_gnu and c_function_gnu, that use the above compileargs options. Read the documentation carefully before doing this.