假设MyFunction是我自定义的函数
char buf[ 1024 ];
char Return_msg[ 140 ];
memset(Return_msg,0,sizeof(Return_msg));
MyFunction(Return_msg);  
sprintf(buf,"返回结果:%s",Return_msg); //************ 1 **********
AfxMessageBox(buf);结果显示出来的是 "返回结果:"后面没了我在 1 处设置了断点,在Debug下看到 Return_msg的值是"0x0012f220 测试成功"为什么?没显示出来呢,0x0012f220 是什么东西啊?错在哪里?

解决方案 »

  1.   

    在Debug下看到 Return_msg的值是 :0x0012f220 "测试成功"
      

  2.   

    0x0012f220 是Return_msg中保存的地址直
      

  3.   

    0x0012f220是Return_msg[0]的地址,也就是Return_msg数组现在指针的值。
      

  4.   

    那我AfxMessageBox(buf);为什么没把"测试成功"显示出来呢?为什么呢?
      

  5.   

    是不是这句有错
    sprintf(buf,"返回结果:%s",Return_msg);
    怎么改正.
      

  6.   

    我看到Return_msg[0]的值怎么是 : -78 '?这个东东
      

  7.   

    把你的MyFunction贴出来。其余代码都没错。
    char buf[ 1024 ];
    char Return_msg[ 140 ];
    memset(Return_msg,0,sizeof(Return_msg));
    strcpy(Return_msg, "测试成功");  
    sprintf(buf,"返回结果:%s",Return_msg); //************ 1 **********
    AfxMessageBox(buf);
    是对的。
      

  8.   

    是指Return_msg[0]的地址,用&Return_msg[0]看。
      

  9.   

    memset(Return_msg,0,sizeof(Return_msg));
    这一句错了吧?
    是不是要改成memset(Return_msg,0,sizeof(char));
      

  10.   

    我按照楼上的改了,不行.: ruihuahan(飞不起来的笨鸟) ( 那我该怎么办呢,把Return_msg[0]给丢掉吗?
      

  11.   

    那把你的MyFunction()代码贴出来看看!
      

  12.   

    int ODBC_CONNECT(char* ODBCName,char* UserName,char* Passwd)
    {
        RETCODE ret;
    ret = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
    if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
         return -1001; ret = SQLSetEnvAttr(henv,(SQLCHAR)SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
        if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
         return -1002;     ret = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
         if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
         return -1003;  ret = SQLConnect(hdbc,(SQLCHAR*)ODBCName,SQL_NTS,
                       (SQLCHAR*)UserName,SQL_NTS,
       (SQLCHAR*)Passwd,SQL_NTS);
     if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
         return -1004;     ret = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
          if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
         return -1005;   return 0;
    }void MyFunction(char Return_msg[ 140 ])
    { char buf[ 1024 ];
    RETCODE retcode;
    int re = ODBC_CONNECT("wusoft1",NULL,NULL);
        if( re != 0)
    {
    sprintf(buf,"连接数据库失败,错误代码:%d",re);
    m_listctrl.InsertItem(0,buf,0);
        }
    else
    m_listctrl.InsertItem(0,"连接数据库成功!",0);   
    char UserID[20];
    int FeeValue = 0; SQLINTEGER cbUserID = SQL_NTS,cbFeeValue = SQL_NTS,cbReturn_msg = SQL_NTS;
        retcode = SQLPrepare(hstmt,(unsigned char*)"{call AP_TEST(?,?,?)}",SQL_NTS);
        if( retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO )
        {
    m_listctrl.InsertItem(0,"准备存储过程失败!",0);
    return;
        } retcode = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,UserID,0,&cbUserID); retcode = SQLBindParameter(hstmt,2,SQL_PARAM_OUTPUT,SQL_C_SSHORT,SQL_INTEGER,0,0,&FeeValue,20,&cbFeeValue); retcode = SQLBindParameter(hstmt,3,SQL_PARAM_OUTPUT,SQL_C_CHAR,SQL_CHAR,140,0,Return_msg,140,&cbReturn_msg); strcpy(UserID,"8613012345678");
    memset(Return_msg,0,sizeof(Return_msg));
    retcode = SQLExecute(hstmt);
        if( retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO )
        {
    m_listctrl.InsertItem(0,"执行存储过程失败!",0);
    return;
        }    return;
    }
      

  13.   

    声明void MyFunction(char Return_msg[ 140 ])改为
    void MyFunction(char *Return_msg)即可。
      

  14.   

    在你的MyFunction函数对Return_msg的操作最后是
    memset(Return_msg,0,sizeof(Return_msg));
    不知道你想干什么,这样的话就把Return_msg清空了,所以才得到了你的结果.
      

  15.   

    strcpy(UserID,"8613012345678");
    memset(Return_msg,0,sizeof(Return_msg));
    后面还少了一句对Return_msg的赋值
    加上strcpy(Return_msg, "测试成功");
      

  16.   

    if( retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO )我在这里设置的断点
      

  17.   

    为什么我在设置断点的时候看到有值,但是AfxMessageBox出来后就没显示了啊?
      

  18.   

    给变量Return_msg赋值为“测试成功”的语句在哪里?根本就没有,怎么会显示“测试成功”?