文字輸出

1. 命令行模式的字符輸出

    在命令行輸出模式,可以使用printf和sprintf函數:

    int printf(const char* format, ...);

    int sprintf(char *szBuffer, const char* format, ...);

    但是,壞消息是:在windows程序中不能使用printf函數;

    好消息是:windows程序中可以使用sprintf函數。

    在windows中使用MessageBox可以得到同樣或者更優於printf的結果。

2. windows消息框輸出 

     在使用sprintf的時候還要考慮一個問題,那就是你所定義的字符緩衝區必須足夠大以存放結果,vsprintf是sprintf的一個變形,它只有3個參數。

    int vsprintf(char *szBuffer, const char* format, va_list ap)

    vsprintf的前兩個參數與sprintf相同,一個用於保存結果的字符緩衝區和一個格式字符串;第三個參數是指向格式化參數的數組的指針。實際上該指針指向在堆棧中供函數呼叫的變量。

    va_list, va_start和va_end宏(在stdarg.h中定義),幫助我們處理堆棧指針。

    使用vsprintf函數,sprintf函數可以這樣寫:

    int sprintf(char *szBuf, const char *format, ...)

    {

           int nReturn;

           va_list  va;

           va_start(va, format);

           iReturn  = vsprintf(szBuf, format, va);

           va_end(va);

           return iReturn;

   }

   va_start宏將va設置爲指向一個堆棧變量,該變量地址在堆棧參數format上面。

   Unicode問題:windows的wsprintf和wvsprintf函數在功能上和sprintf和vsprintf相同,但他們不支持浮點格式。

   格式化消息框:

   int CDECL ErrMsg(TCHAR* szCaption, TCHAR* szFormat, ...)

   {

            TCHAR szBuffer[1024];

            va_list va;

            va_start(va, szFormat);

           wvsprintf(szBuffer, szFormat, va);

          va_end(va);

         return MessageBox(NULL, szBuffer, szCaption, 0);

  }

 

 

發佈了15 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章