2021年2月2日 星期二

snprintf的特別用法

即使寫了很多年的C,還是會遺忘這個用法,

呼叫 snprintf 時,第一個參數若指定 NULL,第二個參數指定 0 的話,可以用來決定緩衝區的大小,例如:

#include <stdio.h>

int main(void) 

{

    int n = snprintf(NULL, 0, "%d %f %s %d %d %d %s",  25, 54.32E-1, "Thompson", 56, 789, 123, "56");

    char str[n + 1]; // 記得最後會有個空字元

    snprintf(str, sizeof(str),  "%d %f %s %d %d %d %s",  25, 54.32E-1, "Thompson", 56, 789, 123, "56"    );

    printf("%s", str);

    return 0;

}


因此,若要串接字串的話,也可以運用以上的方式,例如:

#include <stdio.h>

int main(void) 

{

    char str1[] = "xyz";

    char str2[] = "abc";

    int n = snprintf(NULL, 0, "%s%s",  str1, str2);

    char concated[n + 1];

    snprintf(concated, sizeof(concated), "%s%s", str1, str2);

    printf("%s", concated);

    return 0;

}

沒有留言:

張貼留言