如何检查一个字符串是否以C中的另一个字符串结尾

How to check if a string ends with another string in C

我从 argv[] 中获取图像名称,我需要检查格式是 ".jpg" 还是 ".jpeg"".ppm",但是因为没有 substring()string.h 中,我被迫这样做:

if (imIn[strlen(imgIn) - 4] == '.'
&& imgIn[strlen(imgIn) - 3] == 'j'
&& imgIn[strlen(imgIn) - 2] == 'p'
&& imgIn[strlen(imgIn) - 1] == 'g') {..}

但这需要太多时间 space 我想知道我是否可以做这样的事情

if (strstr(substring(imgIn, strlen(imgIn) - 4, 4), ".jpg") == NULL) {...}.

我不只使用 strstr() 的问题是它会批准 "jpg.png" 之类的东西,因为它会检查整个字符串是否出现。

既然strcmp取了一个const char *的地址,那我们就可以把strlen(imgIn) - 3

位置的字符的地址传进去
const char *img       = "some_picture.jpg";
const char *extension = img + strlen(img) - 3;

if(!strcmp(extension, "jpg"))
        printf("%s", "JPG extension");

但是,有一个问题。如果扩展名是 jpeg,那么 extension 将包含 peg。在这种情况下,一个解决方案是向后遍历字符串,直到我们找到第一个 . 字符。

const char *get_extension(const char *img, size_t sz) {

    const char *ptr;

    ptr = img;
    img += sz;

    for(; img != ptr; --img) {

        if(*img == '.')
            return(img + 1);
    }

    return(NULL);

}


const char *img       = "some_picture.jpeg";
const char *extension = get_extension(img, strlen(img));

if(extension != NULL)
    /* handle valid input */
else 
    /* handle invalid input */