项目场景:
环境: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;
}