报错栏:函数的隐性声明。strrev函数的头文件哪里不对?

问题遇到的现象和发生背景

img

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void encry(char*plain,char*cipher);
int main(){
    char ch[201];
    scanf("%s",ch);
    char  str[402]="\0";
    char *plain=ch;
    char *cipher=str;
    encry(plain,cipher);
    strrev(cipher);
    printf("%s",cipher);
}
void encry(char*plain,char*cipher){
    char str[3];
    int i=0;
    int t=0;
        for(i=0;i<strlen(plain);i++){
            t=*(plain+i)-24;
            sprintf(str,"%d",t);
            strcat(cipher,str);
    }
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

辅助解释说检查是否正确使用头文件,但strrev的头文件不就是string.h吗?

我想要达到的结果

想知道strrev函数到底哪里错了

strrev属于非标准函数,部分编译器不予支持
自己写一个

char* strrev(char *str)
{
    char *p1, *p2;
    if (! str || ! *str)
        return str;
    for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
    {
        *p1 ^= *p2;
        *p2 ^= *p1;
        *p1 ^= *p2;
    }
    return str;
}


可以查看手册:c语言-函数声明 中的内容