簡體   English   中英

通過Regex C驗證輸入

[英]Validating an input via Regex C

我正在編寫一個從用戶讀取文件名的程序。 在處理輸入之前,我想檢查文件名是否有效。

我寫了一個函數,但它返回的一切都是正確的。 我用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;
}

正如user58697指出的那樣,問題是if語句總是被評估為true,因為我正在評估指針(而不是返回值!)。 我按照建議取消引用它並且它有效。 另一種解決方案是在函數validateString中返回值而不是指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM