我有一个用C
定义的函数bool moveTable(char * , long);
是从cobol调用的,当它从cobol调用时,我可以看到它将一个正确的long值传递给moveTable函数,但是当控件传递给C并且我在moveTable中执行printf时,由于某种原因,我得到垃圾负值,如-178634436。我认为这不是一个存储问题,因为在cobol上传递给long的数字是5264011,可以在很长时间内保存。
有什么建议吗?
编辑:这是在cobol中定义字段的方式,它被传递给moveTable函数long参数。
10 ATPRM-TRT-ACCT-ID PIC S9(08) COMP-5.
答案 0 :(得分:0)
ISN'吨
10 ATPRM-TRT-ACCT-ID PIC S9(08) COMP-5.
4字节整数,而 long 可以是4或8字节整数???取决于实施。
不应该
10 ATPRM-TRT-ACCT-ID PIC S9(17) COMP-5.
这可能不是答案,但这是一个问题。 C也期望任何单词对齐???
答案 1 :(得分:-1)
尝试使用int。如果这不起作用,那么删除另一个char *并使用int或long传递值,看看它是否有所不同。在处理交叉系统或字符串然后将数字转换为long时,我会坚持使用整数。这与我的研究无关。我只记得很长时间而不是长期。在AIX中,int和long很可能是相同的大小。
因此,如果没有任何作用,请尝试将数字作为字符串(char *或char数组)传递,无论哪个都有效....
此外,如果您可以更改类型S9(9)..请参阅此