PHP 擴展 - 字符串連接

貌似 PHP7 中刪除了 add_string_to_string 方法,網上找了一遍沒找到,后來翻了一下源代碼,發現字符串連接符的方法 concat_function,該方法接受 3 個參數,分別是輸出結果 zval *,第一個 zval *,第二個 zval *,因此可以如下這樣寫:

zval t;
zval result;
ZVAL_STRINGL(&t, "", 0);  // 目標字符串

ZVAL_STRINGL(&t, "Hello ", sizeof("Hello ") - 1);
concat_function(&result, &result, &t);  // result 結果為 "Hello "

ZVAL_STRINGL(&t, "World", sizeof("World") - 1);
concat_function(&result, &result, &t);  // result 結果為 "Hello World"

zval_ptr_dtor(&t);  // 釋放

如果只需要簡單擴展一下 zend_string 的長度,比如 AZALEA 項目中需要給路徑字符串最后增加一個斜杠 /,可以使用 zend_string_extend 方法:

zend_string *baseUri;
baseUri = zend_string_init("foo", sizeof("foo") - 1, 0);

size_t len = ZSTR_LEN(baseUri);
zend_string_extend(baseUri, len + 1, 0);  // zend_string 長度增加 1
ZSTR_VAL(baseUri)[len] = '/';  // 賦值
ZSTR_VAL(baseUri)[len + 1] = '\0';  // 很重要,否則報 not zero-terminated 錯誤
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言 這次,我們來看看字符串在PHP擴展里面如何處理。示例代碼如下: 上面的str_concat方法實現了如下功能...
    信海龍閱讀 1,368評論 0 0
  • 字符的 Unicode 表示法 codePointAt() String.fromCodePoint() 字符串的...
    卞卞村長L閱讀 771評論 0 0
  • 有一個公眾號很火,每篇文章大概有三四萬的閱讀量。內容主要是作者自己熟悉領域的科普性通俗讀物,有穿插一些作者對其他方...
    李慶芳閱讀 1,930評論 0 2
  • 我們總愛把最差的一面展現給最親近的人,把最好的一面留給陌生人。習慣了有父母在身邊寵著,不愿意自己去嘗試著長大,長時...
    劉小影閱讀 369評論 1 1
  • 09年的片子,拍好后被禁了幾年,13年才上映,據說當年被禁理由是全片沒一個好人,都是壞蛋。照現在的話說就是沒有正能...
    燁慢慢閱讀 1,511評論 3 49