Niech ktoś sprawdzi odpowiedzi z języka C. Programowałem w nim wieki temu i sporo pozapominałem (C++ FTW ;D). Pod odpowiedziami znajdziesz listę ewentualnych wątpliwości i wyjaśnień, którą koniecznie przeczytaj. Jeśli któraś z odpowiedzi okaże się błędna, a będziesz miał możliwość porozmawiania z egzaminatorem, możesz mu przedstawić mój tok myślenia (szczególnie w zadaniach 8, 10 i 20). Poniższe odpowiedzi znajdziesz też w załączniku (zgodnie z prośbą). 1. B, C, D. 2. A. 3. A, B, C. 4. A. 5. B. 6. A. 7. C, D. 8. C. 9. A, B, D. 10. A. 11. A, B. 12. B. 13. C. 14. B. 15. B. 16. C, D. 17. A. 18. B. 19. A. 20. A, B, C, D. Lista wątpliwości: 8. Znacznik sam w sobie pamięci nie nadpisze. Dopiero w połączeniu z jakąś funkcją (np. scanf). Poza tym, fraza "nadpisanie pamięci" może mieć wiele znaczeń... przykład: int x = 1; scanf("%d", &x); Nadpisaliśmy obszar pamięci przypisany do zmiennej x? Tak - został on zastąpiony nową wartością, więc doszło do nadpisania. Domyślam się jednak, że autorowi pytania chodzi o nadpisanie niedozwolonego obszaru pamięci, czyli takiego, który powinien zostać nienaruszony. 10. Kolejna nieścisłość... wszystko zależy od interpretacji frazy "wskaźnik zawiera". Jeśli chodzi nam o to co zawiera obiekt fstream, na który wskazuje ten wskaźnik, poprawną odpowiedzią będzie A. Jednak wskaźnik sam w sobie zawiera tylko adres pamięci, na który wskazuje, więc odpowiedź D też może być poprawna. 20. Teoretycznie każdy z tych programów może być do tego celu wykorzystany, jednak detekcja OS przy użyciu tcpdumpa i netcata jest porównywalna do kopania kilkunastu-metrowej dziury w ziemi przy użyciu łopaty... po co, skoro można użyć koparki (nmapa na przykład)? Lista wyjaśnień: 1. W przypadku odpowiedzi A, jeśli wprowadzimy 15 znaków, buf[14] będzie zawierał ostatni znak, a w buf[15] mamy miejsce na null-terminator. Jeśli wprowadzimy 16, strcpy się nie wykona, więc wszystko jest OK. W odpowiedzi B używają strlen zamiast sizeof, do tego nie dodają null-terminatora na końcu (i tak nie ma na niego miejsca). Tablice znaków bez w połączeniu z funkcjami stringowymi to tykające bomby. W odpowiedzi C alokujemy za mało pamięci - zabraknie miejsca na null-terminator. W odpowiedzi D, buf[0] jest zajęty. Wprawdzie buf[1] zostanie nadpisany przez pierwszy znak stringa w zmiennej X, ale znowu zabraknie miejsca na null-terminator ze względu na warunek strlen(x) < 16. 9. W stdio.h na moim systemie znalazłem alias o nazwie FILE do struktury _IO_FILE zdefiniowanej w libio.h. Zawiera ona właściwości, które zaznaczyłem w odpowiedzi. 11. W FreeBSD mamy strukturę __sFILE, której instancja nosi nazwę FILE (tak dla uściślenia). Znalazłem w niej tylko dwie pierwsze cechy wymienione w odpowiedziach. 16. Linux ma traceroute, Windows tracert. Nie ma jednak określonego systemu, więc obie odpowiedzi są poprawne.
Zadania znajdują się w załączniku, odpowiedź także powinno znajdować się w załączniku.
Odpowiedź
Dodaj swoją odpowiedź