CodeBlocks a "string safe functions"

0

Cześć, z góry przepraszam jeśli okaże się, że moje pytanie jest banalne, albo, że nie do końca dobrze opisuję problem, ale dopiero zaczynam przygodę z programowaniem, a to jest mój pierwszy post.

W książce, z której się uczę są wykorzystywane funkcje typu strlen_s, strcpy_a itd. Z tego, co zrozumiałem do tej pory, CodeBlocks domyślnie nie posiada biblioteki, dzięki której można korzystać z tych funkcji. Próbowałem pobrać ale nie wiem, co dalej zrobić, żeby kompilator widział tą bibliotekę. Bardzo prosiłbym o pomoc. W książce jest jedynie link do strony http://www.gnu.org oraz opis, jaki kod wpisać, żeby sprawdzić czy można tych funkcji używać, a nie ma nic o tym, co zrobić, jeśli nie można. Nie jestem też do końca pewien, czy dobry plik pobrałem. Pobierałem stąd: https://sourceforge.net/projects/safeclib/.

Z góry bardzo dziękuję za odpowiedzi.

1

to są funkcje standardowe, ale dostępne od C11. Jeśli korzystasz z gcc lub clang to musisz powiadomić kompilator, że korzystasz z C11.
Ten przełącznik w kompilatorze to: -std=c11.

Edit: CodeBlocks to tylko IDE, które może współpracować z różnymi kompilatorami.
Domyślnie jest to gcc. Następnym razem nie myl pojęć.

0

Dziękuję za odpowiedzi, ale dalej mam ten sam problem. O ile dobrze rozumiem to mam dopisać tą linijkę tak, jak w załączniku. Ale to niczego nie zmienia, nadal pojawiają się te same błędy.

1

http://en.cppreference.com/w/c/string/byte/strlen

As with all bounds-checked functions, strnlen_s is only guaranteed to be available if STDC_LIB_EXT1 is defined by the implementation and if the user defines STDC_WANT_LIB_EXT1 to the integer constant 1 before including string.h.

0
Tom8765 napisał(a):

Dziękuję za odpowiedzi, ale dalej mam ten sam problem. O ile dobrze rozumiem to mam dopisać tą linijkę tak, jak w załączniku. Ale to niczego nie zmienia, nadal pojawiają się te same błędy.

To jest błąd linkowania, oznacza, że jakaś biblioteka nie była dołączona podczas procesu linkowania.
Trzeba dodać do linker-a -lNazwaBiblioteki, nie wiem jak sie to będzie nazywać dla standardowej biblioteki dla gcc. Pogooglaj albo czekaj na odpowiedź kogoś kto dłubie przy C11.

edit:
Na podstawie tego co napisał @__unknown__ dodaj obok -std=c11 coś takiego -D__STDC_WANT_LIB_EXT1__=1.

edit2:
W sumie jak to jest błąd linkera znaczy, że kompilator widzi te funkcje, czyli definicja tych makr nie jest potrzebna i moja pierwotna odpowiedź jest słuszna.
Chyba, że z jakiegoś powodu biblioteka zależna jest źle zbudowana (dla konfiguracji, która nie wspiera C11).

1 użytkowników online, w tym zalogowanych: 0, gości: 1