Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Różnica między scanf() a scanf_s()

Ostatnio zmodyfikowano 2016-03-02 22:25
Autor Wiadomość
student95
Temat założony przez niniejszego użytkownika
Różnica między scanf() a scanf_s()
» 2016-03-02 15:28:36
Witam,
chciałbym dowiedzieć się jaka jest różnica między bliźniaczymi funkcjami scanf() i scanf_s(). Mam za zadanie napisać program wczytujący ciąg liczb po spacji, dlatego muszę używać tej funkcji. Ale profesor mówił że w kompilowanym programie nie może być żadnych ostrzeżeń (warning), jedyne co się pokazuje to ostrzeżenie C4996 które mówi że bezpieczniej jest używać funkcji scanf_s(), używam visual studio community 2015.
Jedyne co udało mi się znaleźć o tych funkcjach to że scanf_s() jest bezpieczniejsze, bo gdy w scanf() dane przekraczają rozmiar bufora (np. mamy tablice 5 elementową  i wczytamy ciąg 10 znaków, to scanf() zapisze nadmiarowe dane w sąsiedniej pamięci, co może doprowadzić do błędu), a scanf_s() ma dodatkowy parametr określający rozmiar bufora. Tylko że ja nie używałem dodatkowego parametru i program działa tak jak działał wcześniej. Może ktoś jaśniej podać różnicę między tymi dwoma funkcjami.
Dla tych którzy powiedzą że Google nie boli, powiem że znalazłem nawet nagłówki tych funkcji:

C/C++
int scanf( const char * format,...);

int scanf_s( const char * restrict format,...);

Jak widać różnica jest tylko w *restrict, ale nie wiem z czy to się je.
P-145489
Gibas11
» 2016-03-02 22:25:34
W skrócie o
restrict

[restrict] is basically a promise to the compiler that for the scope of the pointer, the target of the pointer will only be accessed through that pointer (and pointers copied from it).

Z tego co kojarzę, w wypadku pominięcia parametru informującego o rozmiarze tablicy funkcja zachowuje się jak zwykły scanf.

Ps. Włączyłeś wszystkie flagi dot. warningów w kompilatorze? Żebyś się potem nie zdziwił gdy profesor Ci powie, że jakieś jednak były. ;)
P-145503
« 1 »
  Strona 1 z 1