C/printf: Różnice pomiędzy wersjami

Przejdź do nawigacji Przejdź do wyszukiwania
Usunięte 48 bajtów ,  5 lat temu
brak opisu edycji
m (→‎Rozszerzenia GNU: kilka razy)
Nie podano opisu zmian
====size====
 
Konwersja :
 
"%d", 100
 
spowoduje zapisanie :
 
[ 1 | 0 | 0 | \0 ]
 
4 znaków do tablicy :
* 3 znaków liczby całkowitej
* znaku końca łańcucha ( snprintf automatycznie dopisuje ten znak )
 
Jeśli : <ref>[http://joequery.me/code/snprintf-c/ Joe McCullough : snprintf-c]</ref>
* rozmiar tablicy str jest <4 ale argument size jest >=4 to powstaje niezdefiniowanie zachowanie (ang. undefined behavior)
* rozmiar tablicy str >=4 but ale argument size jest <4, to nie powstaje niezdefiniowanie zachowanie ale łańcuch będzie obcięty ( ang. truncated)
 
===Format===
===Przykład użycia===
 
====pierwszy====
 
====pierwszy====
<source lang="c">
#include <stdio.h>
i = 4
f = 3.1
WskaznikWskaźnik s wskazuje na napis: Monty Python
<!-------
--------- co ten kod ma ukazywać?
------->
====Konwersja ====
Konwersja 1 liczby typu double na łańcuch :
<source lang=c>
/*
</source>
 
Konwersja 2 liczb typu double na łańcuch :<source lang="c">
 
 
Konwersja 2 liczb typu double na łańcuch :
<source lang =c>
/*
 
http://stackoverflow.com/questions/7228438/convert-double-float-to-string
 
 
 
http://linux.die.net/man/3/snprintf
where the number of digits after the decimal-point character is equal to the precision specification.
If the precision is missing, it is taken as 6;
 
 
The precision
#include <stdio.h>
 
int main(){
 
{
 
 
 
 
 
int main() {
 
/* And remember to allow space for :
</source>
 
Wynik działania :
 
<pre>
d = -1.123457,-2.123457
good size of string is = 19 and now true size is = 20
 
 
</pre>
 
====Liczby całkowite====
 
<source lang ="c">
/*
 
gcc l.c -lm -Wall
./a.out
 
 
http://stackoverflow.com/questions/29592898/do-long-long-and-long-have-same-range-in-c-in-64-bit-machine
#include <limits.h> // INT_MAX, http://pubs.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html
 
int main() {
 
{
 
double lMax;
 
 
int main(){
 
double lMax;
 
 
lMax = log2(INT_MAX);
printf("ULLONG_MAX \t= %25llu ; lMax = log2(ULLONG_MAX) \t= %.0f \n",ULLONG_MAX, lMax);
 
return 0;
 
 
 
 
return 0;
}
 
</source>
 
Wynik :
 
<pre>
ULONG_MAX = 18446744073709551615 ; lMax = log2(ULONG_MAX) = 64
LLONG_MAX = 9223372036854775807 ; lMax = log2(LLONG_MAX) = 63
ULLONG_MAX = 18446744073709551615 ; lMax = log2(ULLONG_MAX) = 64
 
</pre>
 
</source>
 
Kiedy chcemy kilka zapisać do tej samej zmiennej to używamy jej jednocześnie jako wyjścia i wejścia :
 
asprintf(&tmp, "%s %f,%f ", tmp, zx , -zy );
:[[C/Podstawowe procedury wejścia i wyjścia|Podstawowe procedury wejścia i wyjścia]]
:[[C/Napisy#Znaki_specjalne|Znaki specjalne]]
===Źródła===
 
 
===Żródła===
<references/>

Menu nawigacyjne