为什么我的strcmp失败了?

时间:2015-03-02 15:03:37

标签: c++ sql oracle oracle11g string-comparison

我正在处理一个应用程序,如果给出了这个特定的错误消息,它将被忽略:

  

[Oracle] [ODBC] [Ora] ORA-24338:语句句柄未执行

我的比较代码如下:

char Sqlstate[10];
long NativeErrorPtr;
char MessageText[1024];
long BufferLength=1024;
long TextLengthPtr;

SQLGetDiagRec(SQL_HANDLE_STMT,sqlc.g_hstmt,1,(SQLCHAR *) Sqlstate,(SQLINTEGER *) &NativeErrorPtr, 
(SQLCHAR *) MessageText,(SQLSMALLINT) BufferLength,(SQLSMALLINT *) &TextLengthPtr);

success=false;          
char* msg = MessageText;
char* oracleMsg = "[Oracle][ODBC][Ora]ORA-24338: statement handle not executed";

int i = strcmp(msg, oracleMsg);

我得到了i ==1。当我将鼠标悬停在msgoracleMsg上时,它们看起来完全相同。以下是每个变量的复制文本。

  

oracleMsg 0x00c1cd88" [Oracle] [ODBC] [Ora] ORA-24338:语句句柄未执行" char *

     

msg 0x0132d0a4" [Oracle] [ODBC] [Ora] ORA-24338:语句句柄未执行" char *

1 个答案:

答案 0 :(得分:0)

我的问题一定是它没有以NULL结尾。我按照ibre5041的建议使用了if((strncmp(msg, oracleMsg, 55))== 0)。这只比较前55个字符,这避免了非NULL终止的问题。