2020年4月14日 星期二

C 語言 - sprintf / snprintf

sprintf (char *s, const char *format, ...)

    C 語言並沒有其他語言方便的 container 去作字串轉換,所以 sprintf 就顯得強大許多。原理就是 printf 但輸入到字串。但會有 overflow 的 issue 產生。
    int main()
    {
        char str[5];
        sprintf(str, "ABC");
        printf("%s\n", str); // output : ABC
        return 0;
    }
    int main()
    {
        char str[5];
        sprintf(str, "ABCDEF");
        printf("%s\n", str); // output : ABCDEF
        return 0;
    }

snprintf (char *s, size_t maxlen, const char *format, ...)

    snprintf 多了一個參數去限制寫入長度(包含'\0'),安全許多。另外我是用 gcc 編譯的,snprintf 會回傳寫入字串的長度 (不包含'\0'),所以當回傳值大於等於 maxlen,則代表字串被切了。
    int main()
    {
        int ret;
        char str[5];
        ret = snprintf(str, 5, "ABC");
        printf("%s\n", str); // output : ABC
        printf("%d\n", ret); // output : 3
        return 0;
    }/code>
    int main()
    {
        int ret;
        char str[5];
        ret = snprintf(str, 5, "ABCDEF");
        printf("%s\n", str); // output : ABCD
        printf("%d\n", ret); // output : 6
        return 0;
    }


參考資料:
https://blog.xuite.net/tzeng015/twblog/113272245-snprintf
https://linux.die.net/man/3/snprintf

0 意見:

張貼留言

Popular Posts