【发布时间】:2016-08-22 03:59:08
【问题描述】:
我有一个包含 java 代码的程序,然后是使用 JNI 接口的 C 代码,我要完成的任务是用 C 源文件替换一些 java 文件,然后使用 JNI 来实现相同的目的程序,但包含 C 文件。因此我知道Java代码没有问题。在源文件中,我有一个名为 readMap() 的函数,它导致了这个问题。
我已经设法将问题缩小到 C 代码由于某种原因无法读取映射的事实,通过 JNI 调用函数时执行以下 if 语句:
if(in = fopen("../maps/example_map.txt", "r") == NULL)
{
printf("Error opening file\n");
exit(-1);
}
但是,如果我仅从 MainTest.c 中的 main() 运行 C 代码,则该函数将在映射中正常读取,并且所有 C 代码都将起作用,因此我排除了类路径错误的可能性。
我还缩小了 JNI 本身的范围,因为其他函数将能够被调用并在调用时返回所需的结果,但如果调用 readMap() 则它将不起作用。
基本上我想知道是否有其他人遇到过类似的问题以及他们的解决方法是什么,或者是否有人对可能的问题有任何想法?
【问题讨论】:
-
您需要了解operator precedence,因为表达式
in = fopen(...) == NULL并没有您认为的那样。 -
你确定这两种情况下的工作目录是一样的吗?尝试使用绝对路径。
-
why
if(in = fopen("../maps/example_map.txt", "r") == NULL)是 bad 代码的完美示例。至少在两行中做到这一点:FILE *in = fopen(...); if ( in == NULL )...,并且没有方法会犯这个错误。
标签: java c file input java-native-interface