在 C 标准库中,memchr
函数用于在内存块中查找特定的字符。它是一个通用的内存搜索函数,适用于任意类型的数据。
memchr 函数头文件
memchr
函数的头文件是<string.h>
。在使用memchr
函数之前,确保在你的 C 代码中包含这个头文件:
#include <string.h>
memchr 函数原型
void *memchr(const void *s, int c, size_t n);
memchr
函数用于在s
指向的对象的前n
个字符里(每个字符解释为unsigned char
),定位c
第一次出现的位置。
参数说明
s
:要搜索的内存块指针;c
:要查找的字符值,会被转换为unsigned char
;n
:要搜索的字节数;
返回值
memchr
函数找到字符时,返回所定位字符的指针;如果字符未找到,则返回空指针NULL
;
memchr 示例代码
计算字符在内存块中的位置
只需要以memchr
函数的返回值减去内存块的起始地址,就可得到偏移量;但是还要考虑memchr
函数可能返回空指针的情况;
#include <stdio.h>
#include <string.h>
int main() {
const char *src = "perfcode.com";
char target_char = '.';
long int offset;
char* target_ptr = memchr(src, target_char, strlen(src));
if (target_ptr == NULL) {
printf("target byte not found.\n");
} else {
offset = target_ptr - src;
printf("offset = %ld\n", offset);
}
return 0;
}
得到文件的扩展名
memchr
函数可用来查找分隔符或特定标志,例如,在 CSV 文件或其它自定义格式中查找字段分隔符。
这个例子中,用来获取文件名中的扩展名:
#include <stdio.h>
#include <string.h>
int main() {
const char* filename = "example.exe";
char* extension = memchr(filename, '.', strlen(filename));
if (extension == NULL) {
printf("The %s file has no extension.\n", filename);
}
else {
printf("The %s file extension is: %s\n", filename, extension);
}
return 0;
}