📜  在 c 中获取字符串输入 (1)

📅  最后修改于: 2023-12-03 14:50:51.748000             🧑  作者: Mango

在 C 中获取字符串输入

在 C 语言中,获取字符串输入是一个常见的操作,我们可以利用早期的输入函数scanf()来实现。但是,使用scanf()函数进行字符串输入有一个非常显著的风险,就是出现缓冲区溢出(buffer overflow)的问题。这个问题已经成为了一个公认的安全漏洞,会导致程序无法正常运行或者被恶意攻击者利用,因此,更加安全和可靠的方式是使用fgets()函数。

使用fgets()函数获取字符串输入

为了更好的解释如何使用fgets()函数获取字符串输入,我们将给出一个示例。在这个示例中,我们将从用户输入中读取一个字符串,并将其存储在字符数组中。以下是示例代码:

#include <stdio.h>

int main() {
   char str[50];
   
   printf("请输入一个字符串:\n");
   fgets(str, sizeof(str), stdin);

   printf("你输入的字符串是:%s", str);
   
   return 0;
}

在上述代码中,我们使用fgets()函数从标准输入流(stdin)中读取输入的字符串。fgets()函数有三个参数:第一个参数是我们要读取数据的缓冲区,第二个参数是我们要读取的最大长度,第三个参数是我们要读取数据的输入流。

需要注意的是,当我们使用fgets()函数从输入流中读取输入时,会将结尾符'\n'自动添加到输入字符串的末尾。因此,在输出字符串时需要特别注意。

使用gets()函数获取字符串输入

在某些情况下,我们可能会使用gets()函数来获取字符串输入。尽管这种方式比较简单,但也是非常不安全的,因为它无法检查输入的字符串长度,容易导致缓冲区溢出问题。因此,不建议使用gets()函数,但为了完整性,我们还是提供了gets()函数的示例代码。

#include <stdio.h>

int main() {
   char str[50];

   printf("请输入一个字符串:\n");
   gets(str);

   printf("你输入的字符串是:%s", str);
   
   return 0;
}
小结

在 C 语言中,获取字符串输入是非常常见的操作,我们可以利用fgets()函数或者gets()函数来实现。尤其是fgets()函数相对于gets()函数更加安全、可靠,在读取字符串输入时应该优先考虑使用它。