C语言如何将字符串从键盘输入
在C语言中,可以通过scanf、gets、fgets等函数将字符串从键盘输入。 在实际编程中,通常会选择fgets函数,因为它比其他函数更安全、更灵活。接下来我们将详细介绍这些函数的使用方法和注意事项。
一、scanf函数
scanf函数是C语言中最基础的输入函数之一。它可以用来读取各种类型的数据,包括字符串。使用scanf函数读取字符串时,需要注意以下几点:
- 基本用法:scanf("%s", str); 其中str是一个字符数组。
- 自动截断:scanf函数会在遇到空格、换行符或制表符时自动结束读取,这意味着它无法读取包含空格的字符串。
- 缓冲区溢出:如果输入的字符串长度超过了字符数组的大小,会导致缓冲区溢出,可能引发程序崩溃或其他不安全的行为。
例子:
#include <stdio.h>
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%s", str);
printf("你输入的字符串是:%sn", str);
return 0;
}
二、gets函数
gets函数用于从标准输入读取一行字符串,直到遇到换行符为止。虽然它能够读取包含空格的字符串,但由于gets函数无法指定输入长度,因此存在较大的安全隐患,不推荐使用。
- 基本用法:gets(str); 其中str是一个字符数组。
- 安全隐患:由于gets函数没有边界检查,如果输入的字符串长度超过了字符数组的大小,会导致缓冲区溢出。
例子:
#include <stdio.h>
int main() {
char str[100];
printf("请输入一个字符串:");
gets(str);
printf("你输入的字符串是:%sn", str);
return 0;
}
三、fgets函数
fgets函数是读取字符串的推荐方式,它允许指定最大输入长度,从而避免缓冲区溢出的问题。
- 基本用法:fgets(str, sizeof(str), stdin); 其中str是一个字符数组,sizeof(str)是字符数组的大小,stdin表示从标准输入读取。
- 包含换行符:fgets函数会将换行符也读入字符串中,如果不需要换行符,可以手动去除。
例子:
#include <stdio.h>
int main() {
char str[100];
printf("请输入一个字符串:");
fgets(str, sizeof(str), stdin);
// 去除换行符
str[strcspn(str, "n")] = '