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' 是不是在原本字符串的真正末尾。
- 1 回答
- 0 關注
- 1308 瀏覽
添加回答
舉報
0/150
提交
取消