C语言中用gets在终端输入‘\n‘不会当做换行符来处理

gets函数用法

        在终端输入一个字符串,可以包含空格,遇到'\n'就停止读取,'\n'不会读进去,再自动再末尾加上\0,但遇到以下程序输出结果是什么?
int main()
{
	char str1[10] = "gsg\nhdcn";
	char str2[10] = { 0 };
	gets(str2);
	puts(str2);
	printf("%zd %zd\n", strlen(str1), strlen(str1));
	return 0;
}

通过程序的调式发现:

str当中的\存储时为'\\',n就是n

这是为什么呢?

因为ASCII码的前32的字符不能直接在终端显示,也就是说用字符表示不出来,比如\n就直接表示为新的一行了,如果有些字符在内存中是以转义字符存储,在终端直接输入的是其转义之后的字符。比如\0,\n 就会找到这些字符原本存储时的转义字符,\的转义字符为\\,在终端输入的字符已经是转义之后的字符,当对其求长度时,不用在考虑转义字符,转义字符是字符在内存中存储时才会考虑的问题

当通过流函数gets和fgets输入数据时,都不存在转义字符,直接按照原样输出就行

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值