我是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条件。
我怎样才能做到这一点?!
答案 0 :(得分:1)
编辑:
根据评论更新。
s_no
是指向char
数组的指针。 (我之前错过了这个)
您正在将指针与" 0"进行比较这是一个指向空终止字符串的指针。 " 0"是一个带有' 0'的字符串。和一个NULL终止符。这里没有警告。但仍然是不正确的比较。
您可能希望取消引用char
上的ll_cur_rec
指针,看看它是否等于' 0'。
if ((*pa_st.s_no)[ll_cur_rec] == '0')
答案 1 :(得分:0)
pa_st.s_no[ll_cur_rec]
根据你的struct pt_st声明指向一个char变量,当你在if
语句中进行比较时,你实际上是在比较一个字符串“0”。字符串“0”实际上是两个字符为'0',后跟'\ 0'为NULL终止符。因此,您的比较应该与char文字一样,
if (pa_st.s_no[ll_cur_rec] == '0') { }
答案 2 :(得分:0)
您的代码有点令人困惑。
首先,您已将s
和s_no
声明为指向char
数组的指针,而不是指向{{{ 1}}。这是你的意图吗?鉴于char
和5
的结果都是整数,为什么不将这些字段声明为整数,例如:
nvl(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中的字符串。您必须使用==
或strcmp
等库函数,例如
strncmp