sprintf_s
是 C11 標準庫中的一個安全版本的 sprintf
函數,用于將格式化的數據寫入字符串
%s
- 字符串(char *)%d
- 十進制整數(int)%u
- 無符號十進制整數(unsigned int)%f
- 浮點數(float)%lf
- 雙精度浮點數(double)%l
- 長整型(long)%lu
- 無符號長整型(unsigned long)%lld
- 長整型(long long)%llu
- 無符號長整型(unsigned long long)%c
- 字符(char)%f
- 浮點數(float,與 %f
相同)%F
- 雙精度浮點數(double,與 %lf
相同)%p
- 指針(void *)對于其他類型,如 %n
(輸出轉換的字符數)、%x
(十六進制整數,小寫)、%X
(十六進制整數,大寫)等,也可以使用,但它們不是 C11 標準的一部分,而是依賴于具體的編譯器和平臺。
在使用 sprintf_s
時,請確保遵循以下規則:
%n
時,確保傳遞一個指針作為參數,以便將轉換后的字符數存儲在該指針指向的位置。%p
時,將指針轉換為 void *
類型。示例:
#include <stdio.h>
#include <string.h>
int main() {
int a = 42;
double b = 3.14;
char buffer[50];
// 使用正確的格式規范
int result = sprintf_s(buffer, sizeof(buffer), "整數: %d, 雙精度浮點數: %.2lf", a, b);
if (result > 0) {
printf("輸出字符串: %s\n", buffer);
} else {
printf("發生錯誤\n");
}
return 0;
}
這個示例中,我們使用 %d
和 %.2lf
作為格式規范,分別輸出整數和雙精度浮點數。注意,我們使用了 %.2lf
而不是 %lf
,以便限制輸出的浮點數保留兩位小數。