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 意見:
張貼留言