再学C语言45:字符串输入
创始人
2025-05-29 15:41:15

若需把一个字符串读到程序中,首先预留存储字符串的空间,然后使用输入函数获取该字符串

一、创建存储空间

计算机不会先计算字符串长度,然后再为字符串分配空间

如果使用代码:

char *str;
scanf("%s", str);

则在读入str的时候,str会覆盖程序中的已有数据和代码,可能导致程序异常终止,因为在获取字符串之前,虽然进行了声明,但是并没有初始化为其分配存储空间,str可能指向任何可能的位置

最简单的方法是在声明的同时明确指出数组的大小:

char str[80];

另一种方法是使用C库中分配存储空间的函数


为字符串预留空间之后,可以读取字符串,C库提供了3个读取字符串的函数:scanf()、gets()、fgets()

二、gets()函数

gets()函数:get string,从系统的标准输入设备(通常是键盘)获得一个字符串

因为字符串没有预定的长度,所以gets()函数需要知道何时结束读取

解决办法:读字符串直到遇到一个换行字符(\n),按回车键可以产生该字符

gets()函数读取换行字符之前(不包括换行字符)的所有字符,并在这些字符后添加一个空字符(\0),然后把这个字符串交给调用它的程序

gets()函数将读取换行字符并将其丢弃,保证下次读取会在新的一行开始

示例代码:

#include int main(void)
{char name[100]; // 分配空间printf("I need a name:\n");gets(name); // 使用gets()函数从键盘获得字符串printf("%s is a nice name.\n", name); // 显示,确认读取数据return 0;
}

运行结果:

2a3b220cb7c94a2397fc4d5c572a4125.png

gets()函数通过两种方式获得输入:

1)使用一个地址把字符串赋予数组

2)使用return关键字返回字符串地址

/* 将gets()函数的返回值分配给指针 */
#include int main(void)
{char name[100]; // 分配空间char * p;printf("I need a name:\n");p = gets(name); // 使用gets()函数从键盘获得字符串printf("%s is a nice name.\n", p); // 显示,确认读取数据return 0;
}

gets()的函数原型已经在stdio.h中声明,其返回值是一个指向char的指针

char *gets(char *s)
{...return (s);
}

实际gets()函数还需要考虑加入一些错误检测环节

// gets()和getchar()的用法
while(gets(name) != NULL)
while((ch = getchar()) != EOF)

不要混淆空指针和空字符:

空指针是一个地址

空字符是一个char类型的数据对象,其值为0

数值上空指针和空字符都可以用0表示,但是概念不同:NULL是一个指针,而0是一个char类型的常量

 

相关内容

热门资讯

诚信高一作文(经典6篇) 诚信高一作文 篇一诚信的重要性诚信是一种道德品质,是人们在与他人交往中应当秉持的一种态度和行为准则。...
高二励志作文【推荐6篇】 高二励志作文 篇一:砥砺前行,追逐梦想的力量每个人都有自己的梦想,有的人梦想成为一名医生,有的人梦想...
高二温暖的作文(实用3篇) 高二温暖的作文 篇一爱,是一种温暖的力量人生中有许许多多的温暖瞬间,而其中最温暖的莫过于那些关于爱的...
高二作文:蝴蝶翅膀颜色(实用... 高二作文:蝴蝶翅膀颜色 篇一蝴蝶是大自然中美丽的造物,它们用它们独特的翅膀颜色吸引我们的目光。蝴蝶翅...
学会变通高二作文(最新3篇) 学会变通高二作文 篇一灵活运用变通的能力在学习和生活中,我们经常会遇到各种各样的问题和困难。如果我们...