2012-05-25 13 views
6

Mam bardzo głupie wątpliwości. Kiedy uczyłem mojego znajomego programu C, zapytał mnie "dlaczego używamy printf, czy nie może to być printg lub po prostu wydrukować". Nie mogłem mu odpowiedzieć. Czy naprawdę istnieje powód, by wybrać opcję printf w programowaniu C?C - Dlaczego printf, a nie tylko drukowanie?

+1

Po prostu zacząłem się uczyć programowania C ... Przepraszam, jeśli to pytanie jest głupie ... – Sharan

+0

Nie ma czegoś takiego jak głupie pytanie. Zaczekaj, tak, jest. Ale ten nie jest tak naprawdę przykładem jednego. –

+4

Co jest niejasne lub dwuznaczne na temat tego pytania? Jak to nie jest rozsądnie odpowiedzialne? Na pewno są rozsądne odpowiedzi. (Wydaje się też zabawne, że K-ballo był jednym z ludzi, którzy zamknęli to pomimo zaakceptowanej odpowiedzi.) – jamesdlin

Odpowiedz

14

Numer f w printf oznacza sformatowany, służy do drukowania z sformatowanym wyjściem.

+0

Dzięki ... Więc jeśli piszę tylko druk, czy zadziała ... – Sharan

+3

@Sharan Chandran: Nie ma funkcja 'print' w bibliotece standardowej C. –

+3

@SharanChandran Niesformatowana wersja nazywa się po prostu 'puts'. –

0

printf pozwala na formatowanie, a drukowanie nie. Ponadto, drukowanie nie istnieje w C. Nie wiem nawet, czym jest printg.

+0

Nie wiem, co to 'print' jest albo ... –

+0

tak, właśnie przypomniałem sobie, że to też nie istnieje :) dawno nie pisałem niczego w prostej linii c –

0

Jeśli się nie mylę, printf oznacza "Drukuj sformatowane dane na stdout".

+0

Po prostu" print sformatowany "- 'stdout' jest po prostu brane za pewnik, o ile nie określisz inaczej w' fprintf'. –

0

Jak zauważyli inne, to końcowef oznacza wyjście (sformatowany albo w formacie wejście funkcji w rodzinie scanf).

Dodam jednak, że rozróżnienie ma znaczenie, ponieważ dla dzwoniących ważne jest, aby wiedzieć, że łańcuch ma semantykę określającą format. Na przykład, nie rób tego:

char* s = get_some_user_input(); 
printf(s); // WRONG. Instead use: printf("%s", s) or fputs(stdout, s) 

Jeśli s dzieje zawierać % znaków, drukowanie bezpośrednio z printf może spowodować, że dostęp do nieistniejących argumentów, co prowadzi do nieokreślonego zachowania (i to jest przyczyna dla niektórych luki w zabezpieczeniach). Miej na uwadze tę konwencję nazewnictwa, jeśli kiedykolwiek zdefiniujesz własne funkcje wariacyjne na poziomie printf.

Powiązane problemy