length += strnlen_s(str[i],sizeof(str[i]));
//create array to hold all strings combined
char joke[length + strnlen_s(preamble, sizeof(preamble)) + 1];
if(strncpy_s(joke, sizeof(joke), preamble, sizeof(preamble)))
{
printf("Error copying preamble to joke.\n");
return 1;
}
//Concatenate strings in joke
for(unsigned int i = 0; i < strCount; ++i)
{
if(strncat_s(joke, sizeof(joke), str[i], sizeof(str[i])))
{
joiningstring.c:32:3: warning: implicit declaration of function ‘strnlen_s’ [-Wimplicit-function-declaration]
joiningstring.c:38:2: warning: implicit declaration of function ‘strncpy_s’ [-Wimplicit-function-declaration]
joiningstring.c:48:3: warning: implicit declaration of function ‘strncat_s’ [-Wimplicit-function-declaration]
/tmp/ccBnGxvX.o: In function `main':
joiningstring.c:(.text+0x163): undefined reference to `strnlen_s'
joiningstring.c:(.text+0x188): undefined reference to `strnlen_s'
joiningstring.c:(.text+0x1fd): undefined reference to `strncpy_s'
joiningstring.c:(.text+0x251): undefined reference to `strncat_s'
collect2: ld returned 1 exit status
The strlen_s
, strncpy_s
and strncat_s
functions are Microsoft extensions to the standard C library. They are defined in the string.h
header, and are part of the libraries automatically linked.
So, since the function appear to be undefined (you get implicit declaration of function
errors), and not found (due to the undefined reference
errors from the linker), I'd say that you either are trying to compile this code on a non-Microsoft system (in which case, I'd suggest using the alternatives functions strlen
, strncpy
, strncat
) or forgot the include and asked the compiler to not include default library (then you should fix the code and the compiler invocation).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With