Różnica między scanf() a scanf_s()
Ostatnio zmodyfikowano 2016-03-02 22:25
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: 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. |
|
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. ;) |
|
« 1 » |