最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C語言中的字符串拼接(堆與棧)

 更新時間:2017年01月11日 15:18:11   作者:PHPor  
這篇文章主要介紹了C語言中字符串拼接(堆與棧)的相關資料,文中通過一段示例代碼詳細介紹了關于C語言中的字符串拼接問題,有需要的朋友可以參考借鑒,下面來一起看看吧。

首先來看一個demo:

int do_sth(int type) {
  char *errstr;
  
  switch(type) {
  case 1:
    errstr = "Error";break
  case 2:
    errstr = "Warn";break
  case 3:
    errstr = "Info";break
  case 4:
    errstr = "Debug";break
  default:
    return 0;
  }
 
  if (...) {..}
  if (...) {
    ..;
    fprintf(stdout, "%s %s", errstr, ...);
    return 1;
  }
  if (...) { return 1;}
  if (...) {
    fprintf(stderr, "%s %s", errstr, ...);
  }
  ...
  return 0;
}

問題: 如何在errstr信息前面添加一個HOSTNAME 環(huán)境變量信息?

考慮到errstr有可能寫到標準錯誤,也有可能寫到標準輸出,也有可能根本就不輸出,所以,提前輸出HOSTNAME 信息顯然不合適

考慮到引用errstr的地方確實不少,最好一開始就拼接HOSTNAME到該errstr 上面去,那么如何拼接呢?

如果是在腳本語言或者帶有gc的語言中,完全可以直接在errstr變量前面拼接那個動態(tài)獲取到的環(huán)境變量,如:

errstr=getenv("HOSTNAME") + errstr ;

但是c中卻不能這樣,為什么呢?字符串拼接的函數不是有的嗎,如:strcat;

事實卻并非如此簡單,為什么呢?

上面的errstr變量是存儲在棧上的,不需要考慮free的問題,原作者考慮到后續(xù)一大堆復雜的if分支,如果把errstr放在堆上,處處要考慮是不是該把errstr free掉,得死多少腦細胞??!

對于HOSTNAME是個運行時的信息,顯然沒法放到棧上,如果非要和errstr拼接起來的話,errstr必須在堆上,即要動態(tài)的malloc,由此可見,對于腳本語言來講,一個非常簡單的邏輯,在C中卻如此的麻煩

解決辦法:

為了既不需要free,又能拼接字符串,可以定義一個字符數組,如: errstr[255],然后,把需要的信息加進去;為了避免信息太多而不小心越界,可以使用snprintf函數,自動丟棄超長的部分

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • 基于Matlab制作一個不良圖片檢測系統

    基于Matlab制作一個不良圖片檢測系統

    這篇文章主要為大家詳細介紹了如何基于Matlab制作一個不良圖片檢測系統,文中的示例代碼講解詳細,感興趣的可以跟隨小編一起了解一下
    2022-07-07
  • 如何基于C語言socket編程實現TCP通信

    如何基于C語言socket編程實現TCP通信

    本文介紹了如何基于C語言socket編程實現TCP通信,下面小編來簡單介紹下
    2019-05-05
  • C語言自研定時器計劃任務語法詳解

    C語言自研定時器計劃任務語法詳解

    市面主流定時器計劃任務語法: cron ,但是使用起來非常難受,設計的比較非人性話語法,我想一般人都沒幾個記住的,所以本文將自研定時器計劃任務語法,需要的可以參考一下
    2022-09-09
  • C++中String的語法及常用接口的底層實現詳解

    C++中String的語法及常用接口的底層實現詳解

    在C語言中,string是一個標準庫類(class),用于處理字符串,它提供了一種更高級、更便捷的字符串操作方式,string 類提供了一系列成員函數和重載運算符,以便于對字符串進行操作和處理,本編文章會對C++中的 string 進行詳解,希望本篇文章會對你有所幫助
    2023-06-06
  • C語言中利用封裝好的函數實現英文字母的大小寫轉換

    C語言中利用封裝好的函數實現英文字母的大小寫轉換

    這篇文章主要介紹了C語言中利用封裝好的函數實現英文字母的大小寫轉換,需要的朋友可以參考下
    2017-10-10
  • C語言結構及隊列實現示例詳解

    C語言結構及隊列實現示例詳解

    這篇文章主要為大家介紹了C語言實現隊列示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • QT編寫地圖實現離線輪廓圖的示例代碼

    QT編寫地圖實現離線輪廓圖的示例代碼

    這篇文章主要介紹了在利用QT編寫地圖時常常需要用到的離線輪廓圖,離線輪廓圖使用起來比線輪廓圖麻煩一點,需要自己繪制。感興趣的小伙伴可以學習一下
    2021-12-12
  • C語言實現經典掃雷小游戲的示例代碼

    C語言實現經典掃雷小游戲的示例代碼

    掃雷游戲是在一個指定的二維空間里,隨機布置雷,把不是雷的位置都找出來,在你點一個位置的時候它會顯示它周圍全部雷的個數,根據這個線索去找 ,會更容易贏。本文將用C語言實現這一經典游戲,感興趣的可以嘗試一下
    2022-11-11
  • opencv實現讀取視頻保存視頻

    opencv實現讀取視頻保存視頻

    這篇文章主要為大家詳細介紹了opencv實現讀取視頻保存視頻,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++編程中的格式化輸出詳解

    C++編程中的格式化輸出詳解

    這篇文章主要介紹了C++編程中的格式化輸出詳解,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09

最新評論

绩溪县| 崇州市| 遂昌县| 莒南县| 新化县| 中牟县| 南安市| 五台县| 江门市| 九台市| 缙云县| 洛阳市| 五河县| 出国| 施秉县| 清丰县| 牡丹江市| 政和县| 城口县| 安国市| 黔东| 达孜县| 都匀市| 和田市| 沙雅县| 从江县| 盐源县| 沾化县| 连城县| 辽中县| 和龙市| 长治县| 临夏市| 瓮安县| 东源县| 镇江市| 九寨沟县| 嘉义县| 定结县| 安国市| 郎溪县|