項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 search-input 尚未註冊或是沒有一個 view.php 檔案.

【C++ 字串處理 #3】C | printf, fprintf, sprintf, snprintf 相關用法總整理 (內含範例程式碼)

前言

此文章中會整理所有在 C/C++ printf 的相關用法,包含 printf, fprintf, sprintf, snprintf,
以及 vprintf, vfprintf, vsprintf, vsnprintf,會比較他們之間的差別,以及提供程式碼範例。

我們一共會介紹這些:

  • printf, fprintf, sprintf, snprintf
  • vprintf, vfprintf, vsprintf, vsnprintf

先講結論

給新手、還沒有很注重「程式執行使用系統空間」的開發者結論

如果你是 C/C++ 新手,或是還沒有很注重「程式執行使用系統空間」的開發者,
這篇基本上不用看了XD,你只要記得「printf」、「fprintf」、「sprintf」的差別就好!
他們可以幫助你打天下!

如果你是好奇 v 開頭的那系列

vprintf, vfprintf, vsprintf, vsnprintf ,我們可以仔細觀察,
與 printf, fprintf, sprintf, snprintf 只差一個開頭的 「 v 」,
這個 v 代表的是使用 va_list 的意思,也就是說,我們使用了「不限定傳入參數數量的方法」。

也就是說,我們寫好了一個 function,他可以同時接受傳入 1, 2, 3…各種數量的參數。
知道這個概念即可,其他的就與原來「沒有 v」的相同。

最後, printf, fprintf, sprintf, snprintf 的快速結論

function主要特色
prinf基本用法,直接顯示在 terminal 上
fprinf「檔案相關」才會用到
sprinf將值「傳入第一個變數」中
snprinf將值「傳入第一個變數」中,n代表可以控制傳入大小,作為系統空間管理較為安全

printf

定義

簡單來說,就是直接印出來 (在你的 terminal 上),
可以說是基本中的基本用法XD。

> printf
int printf ( const char * format, ... );
Print formatted data to stdout
Writes the C string pointed by format to the standard output (stdout). 
If format includes format specifiers (subsequences beginning with %), 
the additional arguments following format are formatted and inserted in the resulting string replacing their respective specifiers.

> http://www.cplusplus.com/reference/cstdio/printf/

範例程式碼 – printf

這邊直接使用官方範例,裡面其實有講到很多格式調整的部份,
但這裡就先不特別講 (太多內容XD。而且會偏題),之後會有另外一篇文特別去寫。

#include <stdio.h>
using namespace std;

void test_printf()
{
    char s[] = "Hello";

    printf("Strings - padding:\n");
    printf("\t.%10s.\n\t.%-10s.\n\t.%*s.\n", s, s, 10, s);
    printf("Strings - truncating:\n");
    printf("\t%.4s\n\t%.*s\n", s, 3, s);

    printf("Characters:\t%c %%\n", 65);

    printf("Integers\n");
    printf("Decimal:\t%i %d %.6i %i %.0i %+i %i\n", 1, 2, 3, 0, 0, 4, -4);
    printf("Hexadecimal:\t%x %x %X %#x\n", 5, 10, 10, 6);
    printf("Octal:\t\t%o %#o %#o\n", 10, 10, 4);

    printf("Floating point\n");
    printf("Rounding:\t%f %.0f %.32f\n", 1.5, 1.5, 1.3);
    printf("Padding:\t%05.2f