Co oznacza %s I % d w printf w języku C? [zamknięte]

Nie rozumiem co robią %s i d% w tym kodzie C:

for (i=0;i<sizeof(code)/sizeof(char*); i++) {
    printf("%s%d%s%d\n", "Length of String ", i, " is ", strlen(code[i]));
    str = code[i];
    printf("%s%d%s%c\n","The first character in string ", i, " is ", str[0]);
}

Jestem nowy w języku C, a moje tło jest w Javie.

  • co oznaczają %s%d%s%d symbole?
  • dlaczego jest ich tak wielu?
  • czy do konkatenacji używany jest przecinek zamiast +?
 21
Author: M. A. Kishawy, 2012-01-27

9 answers

Rodzina funkcji printf() używa znaku % jako elementu zastępczego. Po napotkaniu %, printf odczytuje znaki następujące po %, aby określić, co należy zrobić:

%s - Take the next argument and print it as a string
%d - Take the next argument and print it as an int

Zobacz ten artykuł Wikipedii dla ładnego obrazu: printf format string

\n na końcu łańcucha znajduje się znak nowej linii / karetki-powrotu.

 48
Author: iccir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-26 23:29:05

% zapis nazywa się określnikiem formatu. Na przykład %d mówi printf (), aby wypisała liczbę całkowitą. %s wyświetla łańcuch znaków (char *) itd. Naprawdę powinieneś to sprawdzić tutaj: http://google.com/search?q=printf + format + Specyfikacja

Nie, przecinki nie są używane do łączenia łańcuchów. Przecinki służą do oddzielania argumentów przekazywanych do funkcji.

 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-26 23:28:16

Pierwszy argument oznacza symbole zastępcze dla następujących zmiennych / parametrów.
Na przykład, %s oznacza, że spodziewasz się, że String będzie twoim pierwszym parametrem print.

Java ma również printf, który jest bardzo podobny.

 3
Author: rtheunissen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-26 23:28:30

%d jest wyświetlany jako int % s jest drukowane jako ciąg znaków % f jest wyświetlany jako zmiennoprzecinkowy

Należy zauważyć, że błędem jest stwierdzenie, że różni się to od Javy. Printf oznacza format wydruku, jeśli wykonujesz sformatowany druk w Javie, jest to dokładnie to samo użycie. Może to pozwolić na rozwiązywanie ciekawych i nowych problemów zarówno w C jak i Javie!

 2
Author: Irony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-27 00:04:54

Pierwszy argument printf jest ciągiem identyfikatorów.

%s odnosi się do ciągu znaków %d odnosi się do liczby całkowitej %c odnosi się do znaku. Dlatego: %S%D % s % c\n wypisuje łańcuch "pierwszy znak w żądle", %d wypisuje i, %S wypisuje "is", a %c wypisuje str [0].

 1
Author: Zyerah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-26 23:29:40

%S jest dla ciągu %d jest dziesiętne (lub int) %c jest dla znaku

Wydaje się żuć przez tablicę znaków i drukować dowolny ciąg znaków, począwszy od każdej kolejnej pozycji. W każdym przypadku łańcuchy zatrzymują się na pierwszym null.

Przecinki są po prostu oddzieleniem argumentów do funkcji, która przyjmuje zmienną liczbę args; liczba ta odpowiada liczbie % args w deskryptorze formatu z przodu.

 1
Author: Rayfleck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-26 23:29:41

"%s%d%s%d\n" jest łańcuchem formatowania; mówi on funkcji printf jak formatować i wyświetlać dane wyjściowe. Wszystko w łańcuchu formatu, który nie ma % bezpośrednio przed nim, jest wyświetlane tak, jak jest.

%s i %d są specyfikatorami konwersji; mówią printf Jak zinterpretować pozostałe argumenty. %s mówi printf, że odpowiadający argument ma być traktowany jako ciąg znaków (w terminach C, ciąg zakończony 0 char); Typ odpowiadającego argumentu musi być char *. %d mówi printf, że odpowiadający argument ma być traktowany jako wartość całkowita; typem odpowiadającego argumentu musi być int. Ponieważ wywodzisz się z tła Javy, ważne jest, aby pamiętać, że printf (podobnie jak inne zmienne funkcje) polega na , , aby powiedzieć mu, jakie są typy pozostałych argumentów. Jeśli ciąg formatujący był "%d%s%d%s\n", printf próbowałby traktować "Length of string" jako wartość całkowitą i i jako ciąg znaków, z tragicznymi skutkami.

 1
Author: John Bode,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-26 23:54:06

%(letter) oznacza typ formatu zastępczego tekstu. %s określa ciąg znaków, %d liczbę całkowitą, a %c znak.

 0
Author: 3Pi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-26 23:29:46

%S % d % s % D\N jest ciągiem formatującym. Służy do określenia sposobu formatowania informacji na wyjściu. tutaj format string ma drukować ciąg, po którym następuje Cyfra, a następnie ciąg, a następnie ponownie cyfra. Ostatni symbol \n oznacza powrót karetki oznaczający koniec linii. W języku C ciągi znaków nie mogą być łączone przez + lub, chociaż można łączyć różne wyjścia w jednej linii za pomocą odpowiednich ciągów formatujących (użycie ciągów formatujących polega na formatowaniu wyjścia info.).

 0
Author: sidharth sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-26 23:33:36