C 語言中獲取子字串
Jinku Hu
2023年10月12日
本文將介紹多種關於如何在 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