在看核心原始碼時,看到這樣一段**:
int __init ip_vs_protocol_init(void)
while (0)
protocols[0] = '\0';
protocols[2] = '\0';
#ifdef config_ip_vs_proto_tcp
register_protocol(&ip_vs_protocol_tcp);
#endif
#ifdef config_ip_vs_proto_udp
register_protocol(&ip_vs_protocol_udp);
#endif
#ifdef config_ip_vs_proto_sctp
register_protocol(&ip_vs_protocol_sctp);
#endif
#ifdef config_ip_vs_proto_ah
register_protocol(&ip_vs_protocol_ah);
#endif
#ifdef config_ip_vs_proto_esp
register_protocol(&ip_vs_protocol_esp);
#endif
pr_info("registered protocols (%s)\n", &protocols[2]);
return 0;
}
不太理解,研究了一番,記錄一下自己的理解。
1 怎麼判斷字串的結尾?
每個位元組都是8位的2進製,如果每一位都為0,則表示字串的末尾。申請的陣列,每個位元組的值是不確定的,除非手動清零,否則不一定為0.
2 字串怎麼拼接的?
先判斷兩個字串的末尾,然後將兩個字串拼接到一起,並將字串最末尾設定為0。
3 為什麼要將位置0和位置2都置為0?
protocols[0] = 『\0』;
protocols[2] = 『\0』;
將位置0置為0表示這是乙個空字串。
拼接的時候,前面預設帶了", "這兩個符號。所以從位置2開始輸出,可以過濾掉前面多餘的「, 」,那麼為什麼需要將位置2也置為0呢?這是因為如果沒有發生拼接的情況下,需要保證輸出為空。
附測試**:
/*strcattest.c*/
#include #include int main ()
測試結果:
root@debian2:~/test# gcc strcattest.c -o strcattest;./strcattest
postition 0:0
postition 0:0
postition 3:0
postition 4:-32
postition 49:65
registered protocols 2 ()
registered protocols 3()
registered protocols 4(▒n▒▒▒▒)
registered protocols 49(a)
root@debian2:~/test#
R語言中字串的拼接操作
在r語言中 paste 是乙個很有用的字串處理函式,可以連線不同型別的變數及常量。函式paste的一般使用格式為 paste sep collapse null 其中 表示乙個或多個r可以被轉化為字元型的物件 引數sep表示分隔符,預設為空格 引數collapse可選,如果不指定值,那麼函式past...
c 拼接字串陣列 C 字串拼接
測試環境 unity2018.4 net4.x。需要注意.net4.x和3.5差異還是挺大的 寫的內容大部分網上已有,算是總結他人的成果,是 1 先說幾條結論 1 1 字串在c 中是高頻出現的 1 2 這類高頻出現方法 字段通常不是每幀的效能瓶頸。但有可能是瞬間卡頓的 1 3 字串記憶體開銷計算 2...
C語言中的字串
從概念上講,c語言中沒有字串型別 在c語言中使用字元陣列來模擬字串 c語言中的字串是以 0 結束的字元陣列 c語言中的字串可以分配於棧空間,堆空間或者唯讀儲存區 char s1 沒有 0 所以s1只不過是個單純的字元陣列 char s2 也是乙個字元陣列,但是最後乙個元素是 0 因此s2就成了c語言...