亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C語言求助,請問如果我用這樣的函數縮短了字符串,如何把在緩存中的剩余字符串打印出來?

C語言求助,請問如果我用這樣的函數縮短了字符串,如何把在緩存中的剩余字符串打印出來?

C
蘇和666 2017-11-01 14:08:01
fit將39后面的全部\0。puts(mesg+8)可以打印出緩存中的內容嗎,為什么?
查看完整描述

1 回答

?
onemoo

TA貢獻883條經驗 獲得超454個贊

C 語言規定字符串是“一串以 '\0' 結尾字符序列”。一般用字符數組來保存,數組中的字符自然是連續排列的,另外別忘了用 '\0' 結尾。

處理字符串的庫函數都遵循這個邏輯。


fit 這個函數只是是在字符數組的相應位置中寫入 '\0'。


比如 fit(msg, 38),就是把 mesg 字符串中的逗號改為 '\0'。這樣后面 puts 在打印字符串時,打印到這個 '\0' 時就認為字符串結束了,于是原來逗號后面的部分就不會被打印出來。


后面 puts(mesg + 39),這是讓 puts 從 mesg 字符串的“串首 + 39”這個位置開始打印。這是從原本的逗號后面開始打印,也就是跳過了前面寫入的那個 '\0'。這樣 puts 就從這里開始一直打印到原字符串的末尾。


那么關于你最后的問題

“fit將39后面的全部\0”:

你指的是這句 fit(msg, 38) 嗎??? 這并不是把第39個字符后面全部寫 '\0' ?。?這只是把第39個字符改為 '\0'。這對字符串的影響我在上面已經說過了。


“puts(mesg+8)可以打印出緩存中的內容嗎”:

為什么要問 +8 ??? 這當然能打印字符串。只不過是從 mesg 的“串首 + 8”這個位置(也就是第9個字符)開始打印。當然仍然是打印到 '\0' 為止,不管這個 '\0' 是不是在原本字符串的真正末尾。

查看完整回答
反對 回復 2017-11-02
  • 1 回答
  • 0 關注
  • 1308 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號