我正在编写一个从用户读取文件名的程序。在处理输入之前,我想检查文件名是否有效。
我写了一个函数,但它返回的一切都是正确的。我用grep测试了正则表达式,并且它有效,但它不能用于C.可以有人指出我做错了什么。
有效文件名:file.txt file123.txt file_123.txt f123.ext f-123.txt
无效的文件名:123.txt /var/somefile.txt文件$ .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;
}
答案 0 :(得分:0)
正如user58697指出的那样,问题是if语句总是被评估为true,因为我正在评估指针(而不是返回值!)。我按照建议取消引用它并且它有效。另一个解决方案是在函数validateString中返回一个值而不是一个指针。