通过 Regex C 验证输入

Validating an input via Regex C

我正在编写一个从用户那里读取文件名的程序。在处理输入之前我想检查文件名是否有效。

我写了一个函数,但它 returns 一切都是正确的。我用 grep 测试了正则表达式,它有效,但它不适用于 C。有人能指出我做错了什么吗。

有效文件名:file.txt file123.txt file_123.txt f123.ext f-123.txt

无效的文件名:123.txt /var/somefile.txt file$.txt...

函数

int *validateString(char *argv){

    int *result = malloc(sizeof(int));

    *result = 0;

    int comp;
    regex_t validRegex;


    comp = regcomp(&validRegex,"^[a-zA-Z][a-zA-Z0-9_-]*.[a-z]+", REG_EXTENDED | REG_NOSUB);
/*
    if(comp){
        *result = 0;
        return result;
    }
*/
    if(!regexec(&validRegex, argv, 0, 0, 0)){
        *result = 1;
    }

    return result;

}

测试代码

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





int *validateString(char *argv);

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


    if(!validateString(argv[1])){

        printf("you have entered a wrong regex!\n");
    }

    return 0;
}

正如 user58697 所指出的,问题是 if 语句总是被评估为真,因为我正在评估指针(而不是 return 值!)。我按照建议取消引用它并且它起作用了。另一个解决方案是 return 一个值而不是函数 validateString 中的一个指针。