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

Usunięta treść Dodana treść
Lethern (dyskusja | edycje)
Wycofanie wersji 115995 utworzonej przez Norill (dyskusja)
Linia 109:
 
===Przykład użycia===
#include <stdioiostream.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;
}
 
int main() {
Wyświetli:
{
 
cout<<"Maly Kaczy a kozaczy... :P"<<endl;
i = 4
system("pause");
f = 3.1
}
Wskaźnik s wskazuje na napis: Monty Python
 
Funkcja formatująca ciąg znaków i alokująca odpowiednią ilość pamięci:
 
#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;
} else {
str = tmp;
size = (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 (tmp) {
str = tmp;
}
}
return str;
}
 
===Uwagi===