【发布时间】:2015-08-13 14:38:31
【问题描述】:
我想写一个这样的函数:
int validate_file_name(char *filename)
{
//...
}
这将:
- 如果文件名中没有
\0字符,则返回 1, - 否则为 0。
我认为可以使用简单的for(size_t i = 0; i < strlen(filename); i++) 来实现,但我不知道如何确定我必须检查多少个字符?
我不能使用strlen(),因为它会在第一次出现\0 字符时终止。
我应该如何解决这个问题?
澄清:
我正在尝试将these guidelines 应用于我收到的文件名。如果您应该避免将\0 放在文件名中,那么如果您没有大小参数,您如何验证这一点。
此外,还有包含多个\0 字符的字符串,例如:http://www.gnu.org/software/libc/manual/html_mono/libc.html#Argz-and-Envz-Vectors。不过,我不知道如果没有明确提供它们的长度是不可能确定的。
结论:
您无法确定不是以 NULL 结尾的字符串的长度。除非你知道课程的长度或者你部署了一些肮脏的技巧:Checking if a pointer is allocated memory or not。
【问题讨论】:
-
需要尺寸参数。
-
我正在实现一个头文件,我不能在那里改变任何东西。所以我无法提供大小参数。
-
想一想:如果文件名可以包含空终止符,你怎么可能找到文件名的结尾?您将需要一个长度参数,或者一个指示字符串结尾的不同标记值。
-
是的,我同意你们的观点,但这里的问题是: 1. 字符串 IS NULL 终止。 2. 它可能包含 NULL 字符,因为用户可以提供这样一个邪恶的文件名。 3.我认为通过检测为该字符串分配的内存块的大小可能有一些方法。
-
"每个 argz 向量由指向第一个元素的指针表示,类型为
char *,和大小,类型为 size_t.. 。”
标签: c string validation