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输入数据时,都不存在转义字符,直接按照原样输出就行