键盘输入一个字符串,编写代码获取字符串的长度并输出,要求使用字符指针实现——遇到gets函数无法使用

本文介绍了由于安全性问题,C语言中的gets()函数被弃用,推荐使用fgets()来代替。通过示例代码展示了如何使用fgets()获取字符串长度并输出,同时解释了fgets()的工作原理和注意事项,包括可能的截断问题以及如何处理换行符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

环境:VS2022 Debug x86

键盘输入一个字符串,编写代码获取字符串的长度并输出,要求使用字符指针实现。


问题描述

gets函数无法使用


原因分析:

gets()函数因为无法检测输入的字符数目是否大于数组,可能会发生内存越界,所以不安全无法于C11被弃用,在C14中移除。

所以改用fgets(char* s,int size,FILE * stream),这个库函数包含在stdio.h这个头文件中,s是首地址名称,可以是数组,size是读取的字符串的长度。stream表示从何种流中读取,可以是标准输入流stdin,也可以是文件流。

如果size长度小于字符串长度会发生截断,如果未超过size-1长度的字符串则会将\n存入,接在字符串后面,紧跟着是\0。

所以也可以将\n改成\0,但是printf里面要改成end-start-1。

(PS:x64环境可能会有一些问题,详情可以参考我另一篇博客:“printf”: 格式字符串“%d”需要类型“int”的参数,但可变参数 1 拥有了类型“__int64” ?


解决方案:

#include<stdio.h>

int main()
{
	char arr[20];
	fgets(arr, 19, stdin);
	char* start = arr;
	char* end = arr;
	while (*end != '\n')++end;
	printf("%d\n", end - start);
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全天

加油,大佬们!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值