C 语言中检查字符串是否包含子字符串

Jinku Hu 2023年10月12日
  1. 使用 strstr 函数来检查一个字符串是否包含 C 语言中的子字符串
  2. 使用 strcasestr 函数检查字符串是否包含子字符串
  3. 使用 strncpy 函数复制一个子字符串
C 语言中检查字符串是否包含子字符串

本文将介绍几种在 C 语言中检查一个字符串是否包含给定子字符串的方法。

使用 strstr 函数来检查一个字符串是否包含 C 语言中的子字符串

strstr 函数是 C 标准库字符串工具的一部分,它被定义在 <string.h> 头中。该函数接受两个 char 指针参数,第一个表示要搜索的字符串,另一个表示要搜索的字符串。它找到给定子字符串的第一个起始地址,并返回对应的 char 指针。如果在第一个参数字符串中没有找到子字符串,则返回 NULL 指针。

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

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

int main(int argc, char *argv[]) {
  char *ret;

  ret = strstr(tmp, "literal");
  if (ret)
    printf("found substring at address %p\n", ret);
  else
    printf("no substring found!\n");

  exit(EXIT_SUCCESS);
}

输出:

found substring at address 0x55edd2ecc014

使用 strcasestr 函数检查字符串是否包含子字符串

strcasestr 并不是标准库功能的一部分,但它是作为 GNU C 库的一个扩展来实现的,可以用 _GNU_SOURCE 宏定义来表示。定义后,我们就可以调用 strcasestr 函数来查找给定子字符串的首次出现。但请注意,这个函数会忽略两个字符串的大小写。

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

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

int main(int argc, char *argv[]) {
  char *ret;

  ret = strcasestr(tmp, "LITERAL");
  if (ret)
    printf("found substring at address %p\n", ret);
  else
    printf("no substring found!\n");

  exit(EXIT_SUCCESS);
}

输出:

found substring at address 0x55edd2ecc014

使用 strncpy 函数复制一个子字符串

或者,可以使用 strncpy 函数将给定的子字符串复制到一个新的缓冲区。它需要三个参数,第一个参数是目标 char 指针,复制的子字符串将被存储在那里,第二个参数是源字符串,最后一个参数表示复制的第一个字节数。第二个参数是源字符串,最后一个参数表示最多复制的第一个字节数。请注意,如果在源字符串的第一个字节中没有找到空字节,那么目标字符串就不会以空结束。

#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
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - C String