?? snprintf.c
字號:
char fmtbuf[FALLBACK_FMTSIZE], obuf[FALLBACK_BASE]; int fl; fl = fe - fs + 1; strncpy (fmtbuf, fs, fl); fmtbuf[fl] = '\0'; if ((data->flags & PF_STAR_W) && (data->flags & PF_STAR_P)) sprintf (obuf, fmtbuf, data->width, data->precision, d); else if (data->flags & PF_STAR_W) sprintf (obuf, fmtbuf, data->width, d); else if (data->flags & PF_STAR_P) sprintf (obuf, fmtbuf, data->precision, d); else sprintf (obuf, fmtbuf, d); for (x = obuf; *x; x++) PUT_CHAR (*x, data); }#endif /* FLOATING_POINT */#if !HAVE_SNPRINTFint#if defined (__STDC__)vsnprintf(char *string, size_t length, const char *format, va_list args)#elsevsnprintf(string, length, format, args) char *string; size_t length; const char *format; va_list args;#endif{ struct DATA data; if (string == 0 && length != 0) return 0; init_data (&data, string, length, format, PFM_SN); return (vsnprintf_internal(&data, string, length, format, args));}int#if defined(PREFER_STDARG)snprintf(char *string, size_t length, const char * format, ...)#elsesnprintf(string, length, format, va_alist) char *string; size_t length; const char *format; va_dcl#endif{ struct DATA data; int rval; va_list args; SH_VA_START(args, format); if (string == 0 && length != 0) return 0; init_data (&data, string, length, format, PFM_SN); rval = vsnprintf_internal (&data, string, length, format, args); va_end(args); return rval;}#endif /* HAVE_SNPRINTF */#if !HAVE_ASPRINTFint#if defined (__STDC__)vasprintf(char **stringp, const char *format, va_list args)#elsevasprintf(stringp, format, args) char **stringp; const char *format; va_list args;#endif{ struct DATA data; char *string; int r; string = (char *)xmalloc(ASBUFSIZE); init_data (&data, string, ASBUFSIZE, format, PFM_AS); r = vsnprintf_internal(&data, string, ASBUFSIZE, format, args); *stringp = data.base; /* not string in case reallocated */ return r;}int#if defined(PREFER_STDARG)asprintf(char **stringp, const char * format, ...)#elseasprintf(stringp, format, va_alist) char **stringp; const char *format; va_dcl#endif{ int rval; va_list args; SH_VA_START(args, format); rval = vasprintf (stringp, format, args); va_end(args); return rval;}#endif /* !HAVE_ASPRINTF */#endif /* !HAVE_SNPRINTF || !HAVE_ASPRINTF */#ifdef DRIVERstatic voidmemory_error_and_abort (){ write (2, "out of virtual memory\n", 22); abort ();}static void *xmalloc(bytes) size_t bytes;{ void *ret; ret = malloc(bytes); if (ret == 0) memory_error_and_abort (); return ret;}static void *xrealloc (pointer, bytes) void *pointer; size_t bytes;{ void *ret; ret = pointer ? realloc(pointer, bytes) : malloc(bytes); if (ret == 0) memory_error_and_abort (); return ret;}static voidxfree(x) void *x;{ if (x) free (x);}/* set of small tests for snprintf() */main(){ char holder[100]; char *h; int i, si, ai;#ifdef HAVE_LOCALE_H setlocale(LC_ALL, "");#endif#if 1 si = snprintf((char *)NULL, 0, "abcde\n"); printf("snprintf returns %d with NULL first argument and size of 0\n", si); si = snprintf(holder, 0, "abcde\n"); printf("snprintf returns %d with non-NULL first argument and size of 0\n", si); si = snprintf((char *)NULL, 16, "abcde\n"); printf("snprintf returns %d with NULL first argument and non-zero size\n", si); /* printf("Suite of test for snprintf:\n"); printf("a_format\n"); printf("printf() format\n"); printf("snprintf() format\n\n");*//* Checking the field widths */ printf("/%%ld %%ld/, 336, 336\n"); snprintf(holder, sizeof holder, "/%ld %ld/\n", 336, 336); asprintf(&h, "/%ld %ld/\n", 336, 336); printf("/%ld %ld/\n", 336, 336); printf("%s", holder); printf("%s\n", h); printf("/%%d/, 336\n"); snprintf(holder, sizeof holder, "/%d/\n", 336); asprintf(&h, "/%d/\n", 336); printf("/%d/\n", 336); printf("%s", holder); printf("%s\n", h); printf("/%%2d/, 336\n"); snprintf(holder, sizeof holder, "/%2d/\n", 336); asprintf(&h, "/%2d/\n", 336); printf("/%2d/\n", 336); printf("%s", holder); printf("%s\n", h); printf("/%%10d/, 336\n"); snprintf(holder, sizeof holder, "/%10d/\n", 336); asprintf(&h, "/%10d/\n", 336); printf("/%10d/\n", 336); printf("%s", holder); printf("%s\n", h); printf("/%%-10d/, 336\n"); snprintf(holder, sizeof holder, "/%-10d/\n", 336); asprintf(&h, "/%-10d/\n", 336); printf("/%-10d/\n", 336); printf("%s", holder); printf("%s\n", h);/* floating points */ printf("/%%f/, 1234.56\n"); snprintf(holder, sizeof holder, "/%f/\n", 1234.56); asprintf(&h, "/%f/\n", 1234.56); printf("/%f/\n", 1234.56); printf("%s", holder); printf("%s\n", h); printf("/%%e/, 1234.56\n"); snprintf(holder, sizeof holder, "/%e/\n", 1234.56); asprintf(&h, "/%e/\n", 1234.56); printf("/%e/\n", 1234.56); printf("%s", holder); printf("%s\n", h); printf("/%%4.2f/, 1234.56\n"); snprintf(holder, sizeof holder, "/%4.2f/\n", 1234.56); asprintf(&h, "/%4.2f/\n", 1234.56); printf("/%4.2f/\n", 1234.56); printf("%s", holder); printf("%s\n", h); printf("/%%3.1f/, 1234.56\n"); snprintf(holder, sizeof holder, "/%3.1f/\n", 1234.56); asprintf(&h, "/%3.1f/\n", 1234.56); printf("/%3.1f/\n", 1234.56); printf("%s", holder); printf("%s\n", h); printf("/%%10.3f/, 1234.56\n"); snprintf(holder, sizeof holder, "/%10.3f/\n", 1234.56); asprintf(&h, "/%10.3f/\n", 1234.56); printf("/%10.3f/\n", 1234.56); printf("%s", holder); printf("%s\n", h); printf("/%%10.3e/, 1234.56\n"); snprintf(holder, sizeof holder, "/%10.3e/\n", 1234.56); asprintf(&h, "/%10.3e/\n", 1234.56); printf("/%10.3e/\n", 1234.56); printf("%s", holder); printf("%s\n", h); printf("/%%+4.2f/, 1234.56\n"); snprintf(holder, sizeof holder, "/%+4.2f/\n", 1234.56); asprintf(&h, "/%+4.2f/\n", 1234.56); printf("/%+4.2f/\n", 1234.56); printf("%s", holder); printf("%s\n", h); printf("/%%010.2f/, 1234.56\n"); snprintf(holder, sizeof holder, "/%010.2f/\n", 1234.56); asprintf(&h, "/%010.2f/\n", 1234.56); printf("/%010.2f/\n", 1234.56); printf("%s", holder); printf("%s\n", h);#define BLURB "Outstanding acting !"/* strings precisions */ printf("/%%2s/, \"%s\"\n", BLURB); snprintf(holder, sizeof holder, "/%2s/\n", BLURB); asprintf(&h, "/%2s/\n", BLURB); printf("/%2s/\n", BLURB); printf("%s", holder); printf("%s\n", h); printf("/%%22s/ %s\n", BLURB); snprintf(holder, sizeof holder, "/%22s/\n", BLURB); asprintf(&h, "/%22s/\n", BLURB); printf("/%22s/\n", BLURB); printf("%s", holder); printf("%s\n", h); printf("/%%22.5s/ %s\n", BLURB); snprintf(holder, sizeof holder, "/%22.5s/\n", BLURB); asprintf(&h, "/%22.5s/\n", BLURB); printf("/%22.5s/\n", BLURB); printf("%s", holder); printf("%s\n", h); printf("/%%-22.5s/ %s\n", BLURB); snprintf(holder, sizeof holder, "/%-22.5s/\n", BLURB); asprintf(&h, "/%-22.5s/\n", BLURB); printf("/%-22.5s/\n", BLURB); printf("%s", holder); printf("%s\n", h);/* see some flags */ printf("%%x %%X %%#x, 31, 31, 31\n"); snprintf(holder, sizeof holder, "%x %X %#x\n", 31, 31, 31); asprintf(&h, "%x %X %#x\n", 31, 31, 31); printf("%x %X %#x\n", 31, 31, 31); printf("%s", holder); printf("%s\n", h); printf("**%%d**%% d**%% d**, 42, 42, -42\n"); snprintf(holder, sizeof holder, "**%d**% d**% d**\n", 42, 42, -42); asprintf(&h, "**%d**% d**% d**\n", 42, 42, -42); printf("**%d**% d**% d**\n", 42, 42, -42); printf("%s", holder); printf("%s\n", h);/* other flags */ printf("/%%g/, 31.4\n"); snprintf(holder, sizeof holder, "/%g/\n", 31.4); asprintf(&h, "/%g/\n", 31.4); printf("/%g/\n", 31.4); printf("%s", holder); printf("%s\n", h); printf("/%%.6g/, 31.4\n"); snprintf(holder, sizeof holder, "/%.6g/\n", 31.4); asprintf(&h, "/%.6g/\n", 31.4); printf("/%.6g/\n", 31.4); printf("%s", holder); printf("%s\n", h); printf("/%%.1G/, 31.4\n"); snprintf(holder, sizeof holder, "/%.1G/\n", 31.4); asprintf(&h, "/%.1G/\n", 31.4); printf("/%.1G/\n", 31.4); printf("%s", holder); printf("%s\n", h); printf("/%%.1G/, 3100000000.4\n"); snprintf(holder, sizeof holder, "/%.1G/\n", 3100000000.4); asprintf(&h, "/%.1G/\n", 3100000000.4); printf("/%.1G/\n", 3100000000.4); printf("%s", holder); printf("%s\n", h); printf("abc%%n\n"); printf("abc%n", &i); printf("%d\n", i); snprintf(holder, sizeof holder, "abc%n", &i); printf("%s", holder); printf("%d\n\n", i); asprintf(&h, "abc%n", &i); printf("%s", h); printf("%d\n\n", i); printf("%%*.*s --> 10.10\n"); snprintf(holder, sizeof holder, "%*.*s\n", 10, 10, BLURB); asprintf(&h, "%*.*s\n", 10, 10, BLURB); printf("%*.*s\n", 10, 10, BLURB); printf("%s", holder); printf("%s\n", h); printf("%%%%%%%%\n"); snprintf(holder, sizeof holder, "%%%%\n"); asprintf(&h, "%%%%\n"); printf("%%%%\n"); printf("%s", holder); printf("%s\n", h);#define BIG "Hello this is a too big string for the buffer"/* printf("A buffer to small of 10, trying to put this:\n");*/ printf("<%%>, %s\n", BIG); i = snprintf(holder, 10, "%s\n", BIG); i = asprintf(&h, "%s", BIG); printf("<%s>\n", BIG); printf("<%s>\n", holder); printf("<%s>\n\n", h); printf ("<%%p> vsnprintf\n"); i = snprintf(holder, 100, "%p", vsnprintf); i = asprintf(&h, "%p", vsnprintf); printf("<%p>\n", vsnprintf); printf("<%s>\n", holder); printf("<%s>\n\n", h); printf ("<%%lu> LONG_MAX+1\n"); i = snprintf(holder, 100, "%lu", (unsigned long)(LONG_MAX)+1); i = asprintf(&h, "%lu", (unsigned long)(LONG_MAX)+1); printf("<%lu>\n", (unsigned long)(LONG_MAX)+1); printf("<%s>\n", holder); printf("<%s>\n\n", h);#ifdef HAVE_LONG_LONG printf ("<%%llu> LLONG_MAX+1\n"); i = snprintf(holder, 100, "%llu", (unsigned long long)(LLONG_MAX)+1); i = asprintf(&h, "%llu", (unsigned long long)(LLONG_MAX)+1); printf("<%llu>\n", (unsigned long long)(LLONG_MAX)+1); printf("<%s>\n", holder); printf("<%s>\n\n", h);#endif#ifdef HAVE_LONG_DOUBLE printf ("<%%6.2LE> 42.42\n"); i = snprintf(holder, 100, "%6.2LE", (long double)42.42); i = asprintf(&h, "%6.2LE", (long double)42.42); printf ("<%6.2LE>\n", (long double)42.42); printf ("<%s>\n", holder); printf ("<%s>\n\n", h);#endif#ifdef HAVE_PRINTF_A_FORMAT printf ("<%%6.2A> 42.42\n"); i = snprintf(holder, 100, "%6.2A", 42.42); i = asprintf(&h, "%6.2A", 42.42); printf ("<%6.2A>\n", 42.42); printf ("<%s>\n", holder); printf ("<%s>\n\n", h); printf ("<%%6.2LA> 42.42\n"); i = snprintf(holder, 100, "%6.2LA", (long double)42.42); i = asprintf(&h, "%6.2LA", (long double)42.42); printf ("<%6.2LA>\n", (long double)42.42); printf ("<%s>\n", holder); printf ("<%s>\n\n", h);#endif printf ("<%%.10240f> DBL_MAX\n"); si = snprintf(holder, 100, "%.10240f", DBL_MAX); ai = asprintf(&h, "%.10240f", DBL_MAX); printf ("<%.10240f>\n", DBL_MAX); printf ("<%d> <%s>\n", si, holder); printf ("<%d> <%s>\n\n", ai, h); printf ("<%%.10240Lf> LDBL_MAX\n"); si = snprintf(holder, 100, "%.10240Lf", (long double)LDBL_MAX); ai = asprintf(&h, "%.10240Lf", (long double)LDBL_MAX); printf ("<%.10240Lf>\n", (long double)LDBL_MAX); printf ("<%d> <%s>\n", si, holder); printf ("<%d> <%s>\n\n", ai, h); /* huh? */ printf("/%%g/, 421.2345\n"); snprintf(holder, sizeof holder, "/%g/\n", 421.2345); asprintf(&h, "/%g/\n", 421.2345); printf("/%g/\n", 421.2345); printf("%s", holder); printf("%s\n", h); printf("/%%g/, 4214.2345\n"); snprintf(holder, sizeof holder, "/%g/\n", 4214.2345); asprintf(&h, "/%g/\n", 4214.2345); printf("/%g/\n", 4214.2345); printf("%s", holder); printf("%s\n", h); printf("/%%.5g/, 4214.2345\n"); snprintf(holder, sizeof holder, "/%.5g/\n", 4214.2345); asprintf(&h, "/%.5g/\n", 4214.2345); printf("/%.5g/\n", 4214.2345); printf("%s", holder); printf("%s\n", h); printf("/%%.4g/, 4214.2345\n"); snprintf(holder, sizeof holder, "/%.4g/\n", 4214.2345); asprintf(&h, "/%.4g/\n", 4214.2345); printf("/%.4g/\n", 4214.2345); printf("%s", holder); printf("%s\n", h); printf("/%%'ld %%'ld/, 12345, 1234567\n"); snprintf(holder, sizeof holder, "/%'ld %'ld/\n", 12345, 1234567); asprintf(&h, "/%'ld %'ld/\n", 12345, 1234567); printf("/%'ld %'ld/\n", 12345, 1234567); printf("%s", holder); printf("%s\n", h); printf("/%%'ld %%'ld/, 336, 3336\n"); snprintf(holder, sizeof holder, "/%'ld %'ld/\n", 336, 3336); asprintf(&h, "/%'ld %'ld/\n", 336, 3336); printf("/%'ld %'ld/\n", 336, 3336); printf("%s", holder); printf("%s\n", h); printf("/%%'ld %%'ld/, -42786, -142786\n"); snprintf(holder, sizeof holder, "/%'ld %'ld/\n", -42786, -142786); asprintf(&h, "/%'ld %'ld/\n", -42786, -142786); printf("/%'ld %'ld/\n", -42786, -142786); printf("%s", holder); printf("%s\n", h); printf("/%%'f %%'f/, 421.2345, 421234.56789\n"); snprintf(holder, sizeof holder, "/%'f %'f/\n", 421.2345, 421234.56789); asprintf(&h, "/%'f %'f/\n", 421.2345, 421234.56789); printf("/%'f %'f/\n", 421.2345, 421234.56789); printf("%s", holder); printf("%s\n", h); printf("/%%'f %%'f/, -421.2345, -421234.56789\n"); snprintf(holder, sizeof holder, "/%'f %'f/\n", -421.2345, -421234.56789); asprintf(&h, "/%'f %'f/\n", -421.2345, -421234.56789); printf("/%'f %'f/\n", -421.2345, -421234.56789); printf("%s", holder); printf("%s\n", h); printf("/%%'g %%'g/, 421.2345, 421234.56789\n"); snprintf(holder, sizeof holder, "/%'g %'g/\n", 421.2345, 421234.56789); asprintf(&h, "/%'g %'g/\n", 421.2345, 421234.56789); printf("/%'g %'g/\n", 421.2345, 421234.56789); printf("%s", holder); printf("%s\n", h); printf("/%%'g %%'g/, -421.2345, -421234.56789\n"); snprintf(holder, sizeof holder, "/%'g %'g/\n", -421.2345, -421234.56789); asprintf(&h, "/%'g %'g/\n", -421.2345, -421234.56789); printf("/%'g %'g/\n", -421.2345, -421234.56789); printf("%s", holder); printf("%s\n", h);#endif printf("/%%'g/, 4213455.8392\n"); snprintf(holder, sizeof holder, "/%'g/\n", 4213455.8392); asprintf(&h, "/%'g/\n", 4213455.8392); printf("/%'g/\n", 4213455.8392); printf("%s", holder); printf("%s\n", h); exit (0);}#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -