问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C语言接收输入字符串的三种方法:scanf、gets和fgets详解

创作时间:
作者:
@小白创作中心

C语言接收输入字符串的三种方法:scanf、gets和fgets详解

引用
1
来源
1.
https://docs.pingcode.com/baike/1075794

在C语言中,接收字符串是一个基础且重要的操作。本文将详细介绍三种常用的字符串输入方法:scanf、gets和fgets,并分析它们各自的优缺点和使用场景。

C语言接收输入字符串的方法主要有:scanf、gets、fgets。其中,scanf是最基础的用法,但存在缓冲区溢出风险;gets已被废弃,不建议使用;fgets是最安全、推荐使用的方法。下面将详细介绍这几种方法及其使用场景。

一、SCANNF接收字符串

1、使用scanf接收字符串

scanf是C语言中最常用的输入函数之一。它可以读取用户输入的字符串,但在使用时需要注意一些细节:

#include <stdio.h>  

int main() {  
    char str[100];  
    printf("Enter a string: ");  
    scanf("%s", str);  
    printf("You entered: %sn", str);  
    return 0;  
}  

上述代码中,scanf会读取用户输入的字符串并存储在str数组中。然而,scanf读取字符串时会将空白字符(如空格、换行符等)视为输入结束符,这意味着它无法读取包含空白字符的字符串。

2、缓冲区溢出问题

scanf在读取字符串时没有限制输入的长度,这可能导致缓冲区溢出问题。例如,如果用户输入的字符串长度超过了str数组的容量,就会导致程序崩溃:

#include <stdio.h>  

int main() {  
    char str[10];  
    printf("Enter a string: ");  
    scanf("%s", str);  
    printf("You entered: %sn", str);  
    return 0;  
}  

为了解决这个问题,可以指定输入的最大长度:

#include <stdio.h>  

int main() {  
    char str[10];  
    printf("Enter a string: ");  
    scanf("%9s", str);  // 最多读取9个字符,留一个给终止符  
    printf("You entered: %sn", str);  
    return 0;  
}  

二、GETS接收字符串

1、使用gets函数

gets是C语言中另一种读取字符串的函数。与scanf不同,gets可以读取包含空白字符的字符串:

#include <stdio.h>  

int main() {  
    char str[100];  
    printf("Enter a string: ");  
    gets(str);  
    printf("You entered: %sn", str);  
    return 0;  
}  

然而,gets存在安全隐患,因为它无法限制输入的长度,容易导致缓冲区溢出。因此,从C11标准开始,gets已被废弃,不建议使用。

2、缓冲区溢出问题

由于gets不会检查输入的长度,输入长度超过数组容量时会导致缓冲区溢出:

#include <stdio.h>  

int main() {  
    char str[10];  
    printf("Enter a string: ");  
    gets(str);  
    printf("You entered: %sn", str);  
    return 0;  
}  

为了避免这种问题,建议使用更安全的输入函数fgets。

三、FGETS接收字符串

1、使用fgets函数

fgets是C语言中最安全的读取字符串的函数之一。它不仅可以读取包含空白字符的字符串,还可以限制输入的长度:

#include <stdio.h>  

int main() {  
    char str[100];  
    printf("Enter a string: ");  
    fgets(str, sizeof(str), stdin);  
    printf("You entered: %sn", str);  
    return 0;  
}  

在上述代码中,fgets会读取用户输入的字符串并存储在str数组中,最多读取sizeof(str) - 1个字符,并确保字符串以空字符

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号