#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define snprintf _snprintf
int main()
{
char desc[8];
int ret, i;
//為了查看是否有自動補\0情況,我們將desc設置非\0值。
memset(desc, 'a', sizeof(desc));
ret = sizeof(desc); //可容納字符的個數
printf("%d\n", ret);
for(i=0; i<=ret+1; i++)
printf("%c", desc[i]);
printf("\n\n");
//ret=8 , 字符串結尾未加\0
memset(desc, 'a', sizeof(desc));
ret = snprintf(desc,sizeof(desc),"%s","aaaaa");
printf("%d\n", ret);
printf("%s\n",desc);
printf("\n");
//ret=5 , 字符串結尾自動補\0)
memset(desc, 'a', sizeof(desc));
ret = snprintf(desc,sizeof(desc),"%s","aaaaaaaa");
printf("%d\n", ret);
printf("%s\n",desc);
printf("\n");
//ret=8, 字符串結尾未加\0
memset(desc, 'a', sizeof(desc));
ret = snprintf(desc,sizeof(desc),"%s","aaaaaaaaaaaaaa");
printf("%d\n", ret);
printf("\n");
//ret=-1 , 字符串結尾未加\0
return 0;
}
VC中的_snprintf的count參數表示,會向buff中寫入count個字符,不包括'\0'字符,並且不會在字符串末尾添加'\0'符,並且,如果字符串超過count,函數返回-1以標志可能導致的錯誤; gcc中的snprintf函數的count參數表示,向buff中寫入count個字符,包括'\0'字符,並且,返回實際的字符串長度. snprintf是C語言提供的字符串格式化函數,int snprintf ( char * restrict dest , size_t n , const char * restrict format , ... ); _snprintf是vc提供的字符串格式化函數,int _snprintf( char *buffer, size_t count, const char *format , ...); int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format [,argument] ... );則是Unicode版本。為了兼容ansi和Unicode,可以添加頭文件tchar.h, 然后使用 _sntprintf , 當宏UNICODE打開時,可以看到 #define _sntprintf _snwprintf,這時實際使用的是_snwprintf.否則,#define _sntprintf _snprintf 使用ansi版本。