C 語言當中的字串處理

愷開愷開撰寫
💡

如果想問問題或單純回饋的話可以填寫表單

目錄

    在 C 語言當中,可以透過 strlen 來取得字串長度。然而每次 strlen 的呼叫都是 O(n)O(n),對於頻繁存取字串操作的應用來說,當字串長度很大時容易造成效能瓶頸,尤其在大流量的應用中尤其如此。一個解決方法是透過另外一個變數保存字串長度,每次有對字串的操作時就改變此變數,這樣一來存取字串長度時只要存取此變數即可,時間複雜度為 O(1)O(1)

    另外一個要注意的是 C 語言並不會對你的 buffer 長度有任何預設,所以在做 concat 之類的操作時就要很小心,例如透過 strcat 來撰寫的話:

    #include <stdio.h>
    #include <string.h>
    
    int main(void) {
      char buf1[20] = "abc";
      char buf2[] = "def";
      strcat(buf1, buf2);
      printf("%s\n", buf1);
      return 0;
    }

    這段程式碼會將 buf2 的內容跟 buf1 結合並連接在 buf1 之後。然而如果我們將 buf1 的大小減少至 5 的話:

    #include <stdio.h>
    #include <string.h>
    
    int main(void) {
    + char buf1[4] = "abc";
      char buf2[] = "def";
      strcat(buf1, buf2);
    
      printf("%s\n", buf1);
      return 0;
    }

    執行後會發現程式碼有錯誤。這是因為當 buf1 與 buf2 結合之後大小超過 4 而導致緩衝溢出。解決方法是在執行 concat 操作之前需要預先檢查一下結合後的字串長度是否會導致溢出,如果會的話就要重新分配記憶體大小。

    如果覺得這篇文章對你有幫助的話,可以考慮下面的連結請我喝一杯 ☕ 可以讓我平凡的一天變得閃閃發光 ✨

    Buy me a coffee