【发布时间】:2015-06-29 23:34:41
【问题描述】:
前几天我在 CodeReview 上创建了一个帖子。一位回答我的问题的人建议我不要使用 strcasecmp(),因为“函数是非标准的 [并且] 这使得 [我的] 代码不可移植”。我是这样使用的:
int playGame()
{
char scanned[3];
printf("Do you wish to play tick-tack-toe?\n");
scanf("%s", scanned);
if(strcasecmp(scanned,"yes")==0)
startGame();
else
{
if (strcasecmp(scanned,"no")==0 || strcasecmp(scanned,"nah")==0 || strcasecmp(scanned,"naw")==0)
{
printf("That's too bad!/nThis program will now end.");
return 1;
}
printf("Not valid input!/nThis program will now end.");
return 1;
}
return 0;
}
有人可以更深入地解释一下为什么 strcasecmp() 有这些限制吗?
【问题讨论】:
-
为什么不直接检查standard?
-
但是哪个标准是“THE”标准?标准的伟大之处在于有这么多! strcasecmp 函数实际上是在 BSD/POSIX 的 libc 标准库中定义的。
-
就我个人而言,我只会检查第一个字符是“N”还是“n”并收工,而不是试图解释特定的俚语实例。但在这里,我们遇到了一个更大的问题,即计算机试图解析人工生成的文本输入。
-
@Dan-korn,你不是很懂行吗:P
-
如有疑问
man 3 strcasecmp:“符合 4.4BSD,POSIX.1-2001。”
标签: c string comparison