在 C 中比较字符串时,fgets 是否比 scanf 更有效?

Is fgets more effective than scanf when comparing strings in C?

处理以下代码时:

#define MAX_NAME_LENGHT 256
int main(void)
{
   char name[MAX_NAME_LENGHT];
   printf("Enter your name: \n");
   scanf("%s", name);
   if(strncmp(name, "John Smith", 10) == 0)
   {
      printf("Hello, John Smith!\n");
   }
   else
   {
      printf("Intruder!!!\n");
   }
   return 0;
}

出现许多错误,尽管输入了 John Smith,但输出打印了 Intruder!!!。但是,当我替换

scanf("%s", name); 

fgets(name, sizeof(name), stdin); 

输出打印Hello, John Smith!这是为什么?

尝试使用下面的行作为您的用法,这样 scanf 会一直获取值,直到遇到 '\n'(换行符),这样也可以节省空间。

scanf("%[^\n]", name);

请记住,scanf 代表 "scan formatted",并且与用户输入的数据相比,格式化的数据少得可怜。如果您可以完全控制输入数据格式但通常不适合用户输入,这是理想的选择。