C 語言中獲取子字串

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

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

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

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

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

#include <stdlib.h>
#include <string.h>
#include <stdio.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 <stdlib.h>
#include <string.h>
#include <stdio.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
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - C String