为什么我的 strcmp 失败了?
Why does my strcmp fail?
我正在开发一个应用程序,如果给出这个特定的错误消息,它会被忽略:
[Oracle][ODBC][Ora]ORA-24338: statement handle not executed
我的比较代码如下:
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
。当我将鼠标悬停在 msg
和 oracleMsg
上时,它们看起来完全一样。这是每个变量的复制文本。
oracleMsg 0x00c1cd88 "[Oracle][ODBC][Ora]ORA-24338: statement handle not executed" char *
msg 0x0132d0a4 "[Oracle][ODBC][Ora]ORA-24338: statement handle not executed" char *
我的问题一定是它不是以 NULL 结尾的。我听从了 ibre5041 的建议并使用了 if((strncmp(msg, oracleMsg, 55))== 0)
。这仅比较前 55 个字符,从而避免了非 NULL 终止问题。
我正在开发一个应用程序,如果给出这个特定的错误消息,它会被忽略:
[Oracle][ODBC][Ora]ORA-24338: statement handle not executed
我的比较代码如下:
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
。当我将鼠标悬停在 msg
和 oracleMsg
上时,它们看起来完全一样。这是每个变量的复制文本。
oracleMsg 0x00c1cd88 "[Oracle][ODBC][Ora]ORA-24338: statement handle not executed" char *
msg 0x0132d0a4 "[Oracle][ODBC][Ora]ORA-24338: statement handle not executed" char *
我的问题一定是它不是以 NULL 结尾的。我听从了 ibre5041 的建议并使用了 if((strncmp(msg, oracleMsg, 55))== 0)
。这仅比较前 55 个字符,从而避免了非 NULL 终止问题。