验证文件名的用户输入

Ste*_*hen 2 c

如果我是让用户输入文件的文件名(允许空格)并验证它是否是一个错误的文件名,我该怎么办呢?

我能想到的唯一方法是创建char数组

char filename[100]
Run Code Online (Sandbox Code Playgroud)

并使用for循环并使用嵌套的if语句来检查字符串的每个字符是否都是!@%^*〜| 和像这样的着作线等

for(...) {
    if(filename[i] == '@'){...}
    if(filename[i] == '!'){...}
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来解决这个问题?因为如果我这样做,我会有很多个人if语句来测试所有可能的非法字符.

MBy*_*ByD 6

您可以使用strchr它,如果返回值不为null,则表示您找到了一个错误的字符.

char bad_chars[] = "!@%^*~|";
char invalid_found = FALSE;
int i;
for (i = 0; i < strlen(bad_chars); ++i) {
    if (strchr(filename, bad_chars[i]) != NULL) {
        invalid_found = TRUE;
        break;
    }
}
if (invalid_found) {
    printf("Invalid file name");
}
Run Code Online (Sandbox Code Playgroud)