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

Usunięta treść Dodana treść
Lethern (dyskusja | edycje)
Anulowanie wersji nr 145951 utworzonej przez 86.63.67.43 (dyskusja)
Lethern (dyskusja | edycje)
→‎Przykład użycia: poprawki, zakomentowanie akapitu o dziwnej treści
Linia 109:
 
===Przykład użycia===
<source lang="c">
#include <stdio.h>
int main() {
int i = 4;
float f = 3.1415;
char *s = "Monty Python";
printf("i = %i\nf = %.1f\nWskaźnik s wskazuje na napis: %s\n", i, f, s);
return 0;
}
 
Wyświetli:
 
int main() {
{
int i = 4;
float f = 3.1415;
const char *s = "Monty Python";
printf("i = %i\nf = %.1f\nWskaźniknWskaznik s wskazuje na napis: %s\n", i, f, s);
return 0;
}
</source>
i = 4
f = 3.1
WskaźnikWskaznik s wskazuje na napis: Monty Python
<!-------
 
--------- co ten kod ma ukazywać?
---------
Funkcja formatująca ciąg znaków i alokująca odpowiednią ilość pamięci:
<source lang="c">
 
#include <stdarg.h>
#include <stdlib.h>
char *sprintfalloc(const char *format, ...)
{
int ret;
size_t size = 100;
char *str = malloc(size);
if (!str) {
return 0;
}
for(;;){
{
va_list ap;
char *tmp;
va_start(ap, format);
ret = vsnprintf(str, size, format, ap);
va_end(ap);
if (ret<size) {
break;
}
tmp = realloc(str, (size_t)ret + 1);
if (!tmp) {
ret = -1;{
break ret = -1;
} else { break;
str =} tmp;else
size = (size_t)ret + 1;{
} str = tmp;
char *tmp size = realloc(str, (size_t)ret + 1);
}
}
}
if (ret<0) {
{
free(str);
str = 0;
} else if (size-1>ret) {
} {
char *tmp = realloc(str, (size_t)ret + 1);
if ( char *tmp = realloc(str, (size_t)ret {+ 1);
str =if (tmp;)
} str = tmp;
}
return str;
}
</source>
------->
 
===Uwagi===