2015-03-02 93 views
0

我上的應用程序,其中如果未給出此特定錯誤信息的工作,它會被忽略:爲什麼我的strcmp失敗?

[甲骨文] [ODBC] [奧拉] 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 「[甲骨文] [ODBC] [奧拉] ORA-24338:語句句柄不執行」 的char *

味精0x0132d0a4「[甲骨文] [ODBC] [奧拉] ORA-24338:聲明句柄未執行「char *

+1

可能錯誤消息不以NULL結尾。 'msg [TextLengthPtr] = 0;'。 – ibre5041 2015-03-02 15:07:15

+0

當我嘗試添加該代碼時,出現未處理的異常'訪問衝突寫入位置0xcd81cf88'。 – 2015-03-02 15:12:56

+3

嘗試使用strncmp代替 – ibre5041 2015-03-02 15:22:46

回答

0

我的問題一定是它不是以NULL結尾。我遵循ibre5041的建議,並使用if((strncmp(msg, oracleMsg, 55))== 0)。這隻會比較前55個字符,這可以避免非NULL終止的問題。