使用wsprintf的未处理异常

时间:2010-10-12 15:32:47

标签: visual-studio-2008

下面的代码会在wsprintf中抛出未处理的异常。

 #define FRONT_IMAGE_NAME "Image01front.bmp"
 void GetName(LPTSTR FileName)
 {

     wsprintf(FileName, "%s", FRONT_IMAGE_NAME);
 }

 int main()
 {

    GetName(FRONT_IMAGE_NAME);
    return 0;
 }

请告诉我为什么wsprintf会产生异常。

感谢。

2 个答案:

答案 0 :(得分:0)

您好像是从FRONT_IMAGE_NAME写信到FRONT_IMAGE_NAME。你不能写一些不是缓冲区的东西。

答案 1 :(得分:0)

LPTSTR是一个typedef。一个LPTSTR 实际上是一个TCHAR *,它取决于UNICODE是否定义了映射到 char *或wchar_t *。

您需要将您的LPTSTR初始化为足够大的字符串 想回来您可以通过两种方式在堆栈上或堆上执行此操作(使用 新): 在堆栈上: TCHAR FileName [50]; wsprintf(FileName,“%s”,FRONT_IMAGE_NAME);

在堆上: LPTSTR FileName = new TCHAR [50]; wsprintf(FileName,“%s”,FRONT_IMAGE_NAME); delete [] FileName; //不要忘记这个!