为什么我的 PRO*C 程序的控制权没有转到 if 部分?

Why the control of my PRO*C program doesn't go to the if section?

我是 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条件。

我怎样才能使这个工作?!

pa_st.s_no[ll_cur_rec] 根据您的结构 pt_st 声明指向一个 char 变量,当涉及到您在 if 语句中的比较时,您实际上是在与字符串“0”进行比较.字符串“0”实际上是两个字符“0”后跟一个 NULL 终止符“\0”。因此,您的比较应该与 char 文字进行比较,

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

编辑:

根据评论更新。

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

您正在将指针与“0”进行比较,“0”是指向空终止字符串的指针。 “0”是一个带有“0”和 NULL 终止符的字符串。这里没有警告。但仍然是不正确的比较。

您可能想要取消引用 ll_cur_rec 处的 char 指针并查看它是否等于“0”。

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

另外,检查一下:Single quotes vs. double quotes in C or C++

你的代码有点混乱。

首先,您已将 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"
{
  ...
}