文字输出

来源:互联网 发布:cda数据分析师好考吗 编辑:程序博客网 时间:2024/04/29 11:53

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);

  }

 

 

原创粉丝点击