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

项目场景:

环境: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

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;
}

你可能感兴趣的:(C语言学习之路,c语言)