为什么我的 PRO*C 程序的控件不转到 if 部分?



我是C和PRO*C的初学者,需要一些帮助。我有一个如下的结构:

typedef struct pt_st{
  char (*s_no)[NULL_BIG_SEQ_NO];
  char (*s)[NULL_STORE];
} pt_st;
pt_st pa_st;

然后是:

   EXEC SQL DECLARE c_st CURSOR FOR
   SELECT 5 as s, nvl(null, 0) as s_no
   FROM dual;

然后我打开并获取光标,如下所示:

EXEC SQL OPEN c_st;
EXEC SQL FETCH c_st INTO :pa_st.s, :pa_st.s_no;

之后,在代码的某个地方,我有:

    if (pa_st.s_no[ll_cur_rec] == "0") 
    {
        // do something here, but the control of the program never reaches here!!!  
    }

但是程序的控制永远不会超出if条件。

我怎样才能使它工作?!

EDIT:

根据注释更新。

s_no是指向char数组的指针。(我之前错过了这个)

您正在将指针与指向空结束字符串的指针"0"进行比较。"0"是一个带有'0'和NULL结束符的字符串。这里没有警告。但这是不正确的比较。

您可能想要在ll_cur_rec处解引用char指针,看看它是否等于'0'。

if ((*pa_st.s_no)[ll_cur_rec] == '0')

还有,检查一下:C或c++中的单引号和双引号

pa_st.s_no[ll_cur_rec]指向一个char变量,根据您的结构体pt_st声明,当涉及到您在if语句中的比较时,您实际上是在与字符串"0"进行比较。字符串"0"实际上是两个字符'0'后面跟着''一个NULL结束符。因此,您的比较应该使用字符字面值,如

if (pa_st.s_no[ll_cur_rec] == '0') { }

你的代码有点混乱。

首先,您已经将ss_no声明为指向char 数组的指针,而不是指向char的指针数组。这是你想要的吗?既然5nvl(null,0)的结果都是整数,为什么不将这些字段声明为整数,例如:
typedef struct pt_st{
   int s_no
   int s;
} pt_st;

那么你的条件就是

if ( pt_st.s_no == 0 )
{
  ...
}

如果您想存储数据库中的字符串表达式,请将它们声明为VARCHAR:

VARCHAR foo[ len ];

请注意,VARCHAR有两个字段——arr用于存储字符串内容,len用于存储字符串长度。

在C语言中不能使用==操作符比较字符串。您必须使用像strcmpstrncmp这样的库函数,例如

if ( strcmp( str, "0" ) == 0 ) // str is equal to the string "0"
{
  ...
}

相关内容

  • 没有找到相关文章

最新更新