snprintf vs _snprintf 和平台差异

来源:互联网 发布:淘宝卖弓犯法吗 编辑:程序博客网 时间:2024/04/30 10:14

#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版本。
0 0
原创粉丝点击