C 語言中獲取子字串

Jinku Hu 2023年10月12日
  1. 使用 strncpy 函式在 C 語言中獲取子字串
  2. 使用自定義函式在 C 語言中獲取子字串
C 語言中獲取子字串

本文將介紹多種關於如何在 C 語言中獲取子字串的方法。

使用 strncpy 函式在 C 語言中獲取子字串

strncpy 是定義在 <string.h> 標頭檔案中的 C 字串庫函式的一部分。它將給定數量的位元組從源字串複製到目的地。strncpy 需要三個引數-目標 char*、源指標和表示要複製的位元組數的整數。如果指定的位元組數超過了源字串所包含的位元組數,那麼額外的空位元組將被儲存在目的地。

strncpy 函式返回指向目標字串的指標;因此,我們可以將呼叫連結到 printf 語句中,直接列印子字串。下面的例子演示瞭如何列印前四個字元的子字串,然後再列印下一個 10 個字元的子字串。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *str = malloc(strlen(tmp));

  printf("%s\n", strncpy(str, tmp, 4));
  printf("%s\n", strncpy(str, tmp + 5, 10));

  free(str) exit(EXIT_SUCCESS);
}

輸出:

This
string lit

使用自定義函式在 C 語言中獲取子字串

或者,我們可以為 strncpy 定義一個自定義的函式封裝器,並指定一個新的四引數介面。也就是說,函式 getSubstring 將接收目標字串和源字串,加上兩個整數,指定需要作為子字串的字元的起始和結束位置。需要注意的是,這個函式原型並沒有實現額外的錯誤檢查,而是直接返回從 strncpy 呼叫中傳遞過來的 char*指標。

與前面的例子類似,getSubstring 也可以作為引數鏈入 printf 函式。關於 strncpy 的一個注意事項是,目標字串和源字串在記憶體中不能重疊。另外,目標指標應該指向一個足夠大的緩衝區來儲存源字串。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char *tmp = "This string literal is arbitrary";

char *getSubstring(char *dst, const char *src, size_t start, size_t end) {
  return strncpy(dst, src + start, end);
}

int main(int argc, char *argv[]) {
  char *str = malloc(strlen(tmp));

  printf("%s\n", getSubstring(str, tmp, 0, 4));
  printf("%s\n", getSubstring(str, tmp, 5, 10));

  free(str);
  exit(EXIT_SUCCESS);
}

輸出:

This
string lit
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C String