snprintf vs _snprintf 和平台差異


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM