函數返回值可以是字符嗎,字符串參數傳遞與返回值(轉)

 2023-10-15 阅读 26 评论 0

摘要:轉載請注明出處! 原文地址鏈接:http://blog.csdn.net/zgyulongfei/article/details/7409441 ? 函數返回值可以是字符嗎,在編程的時候我們不僅需要使用無參的函數,有參數的函數也是必須的。 這次我編寫一個函數用來傳遞String類型參數,并輸出該函

轉載請注明出處!

原文地址鏈接:http://blog.csdn.net/zgyulongfei/article/details/7409441

?

函數返回值可以是字符嗎,在編程的時候我們不僅需要使用無參的函數,有參數的函數也是必須的。

這次我編寫一個函數用來傳遞String類型參數,并輸出該函數的返回值。

編寫java類:

?

[java]?view plaincopy
  1. class?StringFunction??
  2. {??
  3. ????private?native?String?getWords(String?hint);??
  4. ????static??
  5. ????{??
  6. ????????System.loadLibrary("StringFunction");??
  7. ????}??
  8. ????public?static?void?main(String?[]?args)??
  9. ????{??
  10. ????????StringFunction?sf?=?new?StringFunction();??
  11. ????????String?hint?=?"say?something:?";??
  12. ????????String?words?=?sf.getWords(hint);??
  13. ????????System.out.println("Get?the?words:?"?+?words);??
  14. ????}??
  15. }??

沒有為格式字符串傳遞足夠參數,?

?

在命令行界面下,輸入命令編譯:javac ?StringFunction.java

生成.class之后,繼續輸入命令:javah ?–jni ?StringFunction

strcmp函數比較字符串?接著就生成了StringFunction.h之后,然后開始編寫c文件StringFunction.c了。

C代碼如下:

?

[cpp]?view plaincopy
  1. #include?<jni.h>??
  2. #include?"StringFunction.h"??
  3. ??
  4. JNIEXPORT?jstring?JNICALL?Java_StringFunction_getWords(JNIEnv?*env,?jobject?obj,?jstring?hint)??
  5. {??
  6. ????char?buf[128];????
  7. ????const?char?*str?=?(*env)->GetStringUTFChars(env,?hint,?NULL);//注釋1??
  8. ????if(str?==?NULL)??
  9. ????{//注釋2??
  10. ????????return?NULL;??
  11. ????}??
  12. ????printf("%s",?str);????
  13. ????(*env)->ReleaseStringUTFChars(env,?hint,?str);//注釋3??
  14. ????scanf("%s",?buf);?????
  15. ????return?(*env)->NewStringUTF(env,?buf);//注釋4??
  16. }??


代碼寫好后,將StringFunction.c 編譯成DLL動態鏈接庫(不懂編譯?看這里)。

c語言字符串做函數參數。?

運行程序,結果如下:

?

js函數參數傳遞字符串、?

分析:

注釋1:由于不能將jstring類型直接轉換為c語言的char*類型,所以通過GetStringUTFChars進行操作。GetStringUTFChars方法可以獲得到以UTF-8格式的字符串的指針。

const jchar *GetStringChars(JNIEnv*env, jstring str, jboolean *isCopy);

java有參有返回值方法調用、當isCopy為JNI_TRUE時,表示返回源字符串的一個副本;當其為JNI_FALSE表示直接返回源字符串的指針;通常為NULL,因為我們不關心返回的是一個實例還是一個指向源字符串的指針。

注釋2:由于java虛擬機分配內存空間可能會失敗,所以這里得進行一次判斷。

注釋3:用了GetStringChars得記得調用ReleaseStringUTFChars方法釋放內存,如果不釋放的話,可能導致內存泄露。

注釋4:將UTF-8的字符序列buf轉換成String類型

java返回字符串的方法。-------------------------------------------------

要下載本文源碼,請點擊這里!

轉載于:https://www.cnblogs.com/YangBinChina/p/4243957.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/139200.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息