在 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;
}