error C3872: '0x3000': this character is not allowed in an identifier

編程時,出現如下的錯誤:
Error 1 error C3872: '0x3000': this character is not allowed in an identifier
Error 2 error C3872: '0x3000': this character is not allowed in an identifier


錯誤原因:
      我當時是因爲從網上覆制瞭如下一段代碼:
      #include <stdarg.h>
  char buffer[80];
  int vspf(char *fmt, ...)
  {
  va_list argptr;
  int cnt;
  va_start(argptr, fmt);
  cnt = vsprintf(buffer, fmt, argptr);
  va_end(argptr);
  return(cnt);
  }
  int main(void)
  {
  int inumber = 30;
  float fnumber = 90.0;
  char string[4] = "abc";
  vspf("%d %f %s", inumber, fnumber, string);
  printf("%s\n", buffer);
  return 0;
  }
他說運行結果如下,但是我運行就出現的錯誤,其實他的代碼沒有錯,是我從網頁上覆制時,帶有看不見的符號(當你全選的時候,你就可以看到每一行代碼後面都有長條),
導致編譯就錯誤

該程序結果爲
  30 90.000000 abc


解決辦法:

   把每一行代碼後面的,看不見的字符都刪除,就可以解決這個問題。

補充知識:

vsprintf

  /* 函數名: vsprintf
  功 能: 送格式化輸出到串中
  返回值: 正常情況下返回生成字串的長度(除去\0),錯誤情況返回負值
  用 法: int vsprintf(char *string, char *format, va_list param);
  // 將param 按格式format寫入字符串string中
  注: 該函數會出現內存溢出情況,建議使用vsnprintf
  程序例:
  */
  #include <stdarg.h>
  char buffer[80];
  int vspf(char *fmt, ...)
  {
  va_list argptr;
  int cnt;
  va_start(argptr, fmt);
  cnt = vsprintf(buffer, fmt, argptr);
  va_end(argptr);
  return(cnt);
  }
  int main(void)
  {
  int inumber = 30;
  float fnumber = 90.0;
  char string[4] = "abc";
  vspf("%d %f %s", inumber, fnumber, string);
  printf("%s\n", buffer);
  return 0;
  }
  該程序結果爲
  30 90.000000 abc
  VA_LIST的用法( VA_LIST 是在C語言中解決變參問題的一組宏):
  (1)首先在函數裏定義一具VA_LIST型的變量,這個變量是指向參數的指針
  (2)然後用VA_START宏初始化變量剛定義的VA_LIST變量,這個宏的第二個
  參數是第一個可變參數的前一個參數,是一個固定的參數。(如在運行VA_START
  (ap,v)以後,ap指向第一個可變參數在堆棧的地址。)
  (3)然後用VA_ARG返回可變的參數,VA_ARG的第二個參數是你要返回的參數的類型。
  (4)最後用VA_END宏結束可變參數的獲取。然後你就可以在函數裏使用第二個參數了。
  如果函數有多個可變參數的,依次調用VA_ARG獲取各個參數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章