C语言中的字符串输入输出函数

1. 字符串输入(gets、fgets、gets_s、scanf)

	a. 分配内存空间
		a. 静态内存分配
			○ 指的是在编译时确定数组等数据类型的大小,然后由计算机分配好
			○ 在声明数组时要显式的声明数组的大小,为字符串的输入分配内存空间
			○ char name[81];
		b. 动态内存分配
			○ 通俗一点就是向计算机要内存空间,是在程序运行时,再向计算机要内存
			○ 一般是用malloc函数
				§ #include<stdlib.h>
				§ void* malloc(size_t  size);
				§ 利用malloc申请到的内存空间是以字节为单位的,返回的结果是void *,一般需要类型转换为自己需要的类型号
				int *a;
				a=(int*)malloc(n*sizeof(int));  //本语句的意思就是通过malloc函数向计算机申请一块内存空间,这个空间的大小是
				n*sizeof(int),返回的是一个void*类型的指针,也就是一个指向未知类型数据的地址,之后再把这个指针转化为我们需要的类型---int *。
				§ 与申请内存空间相对应的就是释放内存空间free()
					□ free(a);
					□ 只能还申请来的空间的首地址
				§ 如果申请失败了就会选择返回0或者是NULL
	b. gets()
		○ gets()函数只是知道分配的内存空间的地址,但是不知道分配的内存空间有多大,也即是有可能会造成缓存区溢出问题
		○ 读取整行数据,直至遇到换行符
		○ gets函数会将读进的换行符丢掉
	c. fgets()函数(通常是最佳选择)
		○ fgets(缓冲区地址,读入字符最大值,提供字符串的文件)
			○ fgets知道要分配的内存地址和内存空间的最大值,以及字符串数据的来源(文件),如果在控制台读入,则用stdin。
			○ fgets()将读入n-1字符或者遇到第一个换行符为止
			○ fgets把换行符放在字符串末尾
			○ 该函数函数返回的地址与传入的第 1 个参数相同
				#include <stdio.h>
				#define SIZE 10
				
				int main()
				{
				    char words[SIZE];
				    puts("Enter string:");
				    while (fgets(words, SIZE, stdin) != NULL && words[0] != '\n') 
				   {   
				        fputs(words, stdout);
				    }
				    puts("Done");
				
				    return 0;
				}
				//如果读到文件结尾或者空行时就会退出
				//在本例中,fgets的返回值一直都不是NULL
				//fgets()读取字符为(SIZE-1)个即停止,或者读取到第一个‘\n’即可
		○ fputs(数据来源,要写入的文件)
			○ fputs知道数据来源和数据要写入到哪个文件,如果是写入到控制台,则用stdout
			○ 数据来源有什么就会写什么,不会自动添加换行符
	d. gets_s()函数也可以用于替代gets
			○ gets_s(argu1,argu2)
				§ argu1是存储位置,argu2是最大字符数
			○ 和gets()一样,读到换行符时,会把换行符丢弃掉
	e. scanf()
		○ scanf函数确定字符串末尾的方法是
			○ 从非空白开始直至遇到第一个空白字符(包括空行、空格、制表符、换行符)
			○ 若指定字段宽,则将满足字宽和第一个空白字符“做或逻辑”--->满足即可
			○ 若上一次读取键盘输入没有读完,下一次读取会从上次调用函数结束的地方开始

2. 字符串输出:puts()、fputs()、printf()

	a. puts(argu1)函数
		a. argu1:输出字符串的地址
		b. puts函数会在输出字符串的末尾自动加上换行符
		c. 遇到空字符就会停止输出---因此必须确保要有空字符
		d. 如果没有空字符,那么puts会继续打印内存中后面的字符直至遇到空字符
	b. fputs(argu1,argu2)函数
		a. argu1:输出字符地址;argu2:要写入数据的文件(打印在显示器用stdout)
		b. 不在末尾添加换行符号
	c. printf()函数
		a. 不在末尾加换行符号
		b. 打印多个字符串更加简单

3. 自定义输入输出函数

	a. 利用putchar,getchar,while循环等自定义输入输出函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咖啡与乌龙

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值