#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版本。