【只是个小程序小函数】想问一下一般C中对文件名判断的方法有哪些比较简单的方法或函数
#include<stdio.h>//#include<stdlib.h>#include<string.h>#define ERR_CHAR 47,92,58,42,63,34,60,62,124int fcmp(char * arg1);int main(int argc,char *argv[]){ bool qt=1; while(qt) { if(argc!=2) { printf("参数不正确!\n"); qt=0; } else { if(!fcmp(argv[1])) { printf("文件名正确!\n");//文件名正确继续操作的代码添加处 printf("文件名:%s",argv[1]); qt=0; } else { printf("文件名不正确!");//文件名不正确的处理代码添加处 qt=0; } } } return 0;}//验证文件名中是否包含特字符如:/\:*?"<>|int fcmp(char * arg1){ int arg1len; char arg2[9]={ERR_CHAR}; arg1len=strlen(arg1); if(arg1len>100)//限制文件名长度,虽然路径加文件名最长达两百多以上 return 2; for (int i=0;i<arg1len;i++) { for(int j=0;j<9;j++) { if(arg1[i]==arg2[j]) { return 1; }; } } return 0;}
c-char-sequence c-char
c-char :
any member of the source character set except the single quotation mark ('), backslash (\), or newline character
escape-sequence
escape-sequence :
simple-escape-sequence
octal-escape-sequence
hexadecimal-escape-sequence
simple-escape-sequence : one of
\' \" \? \\
\a \b \f \n \r \t \v
octal-escape-sequence :
\octal-digit
\octal-digit octal-digit
\octal-digit octal-digit octal-digit
hexadecimal-escape-sequence :
\xhexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit
Microsoft C++ supports normal, multicharacter, and wide-character constants. Use wide-character constants to specify members of the extended execution character set (for example, to support an international application). Normal character constants have type char, multicharacter constants have type int, and wide-character constants have type wchar_t. (The type wchar_t is defined in the standard include files STDDEF.H, STDLIB.H, and STRING.H. The wide-character functions, however, are prototyped only in STDLIB.H.)
The only difference in specification between normal and wide-character constants is that wide-character constants are preceded by the letter L. For example:
char schar = 'x'; // Normal character constant
wchar_t wchar = L'\x81\x19'; // Wide-character constant
Table 1.2 shows reserved or nongraphic characters that are system dependent or not allowed within character constants. These characters should be represented with escape sequences.
Table 1.2 C++ Reserved or Nongraphic Characters
Character ASCII
Representation ASCII
Value Escape Sequence
Newline NL (LF) 10 or 0x0a \n
Horizontal tab HT 9 \t
Vertical tab VT 11 or 0x0b \v
Backspace BS 8 \b
Carriage return CR 13 or 0x0d \r
Formfeed FF 12 or 0x0c \f
Alert BEL 7 \a
Backslash \ 92 or 0x5c \\
Question mark ? 63 or 0x3f \?
Single quotation mark ' 39 or 0x27 \'
Double quotation mark " 34 or 0x22 \"
Octal number ooo — \ooo
Hexadecimal number hhh — \xhhh
Null character NUL 0 \0
If the character following the backslash does not specify a legal escape sequence, the result is implementation defined. In Microsoft C++, the character following the backslash is taken literally, as though the escape were not present, and a level 1 warning (“unrecognized character escape sequence”) is issued.
Octal escape sequences, specified in the form \ooo, consist of a backslash and one, two, or three octal characters. Hexadecimal escape sequences, specified in the form \xhhh, consist of the characters \x followed by a sequence of hexadecimal digits. Unlike octal escape constants, there is no limit on the number of hexadecimal digits in an escape sequence.
Octal escape sequences are terminated by the first character that is not an octal digit, or when three characters are seen. For example:
wchar_t och = L'\076a'; // Sequence terminates at a
char ch = '\233'; // Sequence terminates after 3 characters
Similarly, hexadecimal escape sequences terminate at the first character that is not a hexadecimal digit. Because hexadecimal digits include the letters a through f (and A through F), make sure the escape sequence terminates at the intended digit.
Because the single quotation mark (') encloses character constants, use the escape sequence \' to represent enclosed single quotation marks. The double quotation mark (") can be represented without an escape sequence. The backslash character (\) is a line-continuation character when placed at the end of a line. If you want a backslash character to appear within a character constant, you must type two backslashes in a row (\\). (SeePhases of Translation in the Preprocessor Reference for more information about line continuation.)
[解决办法]
文件名中照样允许<>,之所以你觉得不允许,那是shell的行为,它把<>用作重定向了。
在bash下:
touch '<'
rm '<'
刚入门,打好基础很重要,自己不清楚的多搜索下,不要先入为主,否则到后面再来纠正错误的观点很麻烦的。