正如偶的签名档所说:解决了旧问题就会遭遇新问题。    昨天那个在java中通过jni调用dll中的api的问题(详见http://community.csdn.net/Expert/topic/5459/5459435.xml?temp=.5141107),今天解决了:)    除了忘了引入一个.lib文件外,另一个原因很诡异:我把c源代码中那些变量的声明统一放到了最前面,然后生成dll时,就不会再出那些莫名其妙的错误了……    但正如偶得签名档所说,解决了旧问题就会遭遇新问题。昨天的问题解决了,今天便陷入了一个更具体的问题之中。一个同学说,他解决问题之前,会把所有问题列出来,一个一个解决。但是问题的关键是,这些问题,根本就是无法预知的,又如何事先列出……    唔,终于要说出今天的问题所在了,好好组织一下语言先(ps:表达能力越来越弱了(原本也很弱……)……)    用到的dll中有5个api。第一个api是初始化一块内存,返回这块内存的大小和首地址指针(char *类型)。在这个地方,偶可能犯了一个错误。因为一看见(char *),便以为它是字符串,便把它转化为jstring类型,传回给java。这个jstring在java中被转换为了String类型。(而事实上,将这块内存的数据当作byte[]传回java更加合理?)    这样做是有危险的,因为这块内存中可能(几乎是必然)包含'\0'这样的字符。而'\0'这个字符标志着(char *)字符串的结束。所以传回java的字符串在第一个'\0'字符处便被截断了。    我于是很自然想把'\0'这个字符替换成一个不常用的字符'\f'(打印时的换页字符)。然后再把这个字符串传给java,在java中,再把这个String中所有的'\f'替换回'\0'。    按理说这样做了应该没有别的问题了(除了一个汉字乱码问题,已解决),但是当我将这个java中的已将所有'\f'替换回'\0'的String打印出来和原来最初第一个api中的(char *)字符串比较时,发现有几处原来显示为' '(可能为'\0'也可能为' ')字符显示成了'?'。    真是莫名其妙……,莫名奇妙……    怎么解决啊????    期待各位牛人的出现……