admin 管理员组文章数量: 887007
关于‘\0’和‘\n’的去留问题
目录
- scanf
- gets
- strcpy
- strncpy
- strcat
- strncat
- 总结
scanf
scanf函数在读取字符串的时候是不会读取空格、Tab、\n的;
并且scanf会自动给字符串添加\0
scanf函数在读取字符串结束时,并不会清理缓冲区,上一次操作留下的\n还在:
这也就提醒我们再利用scanf读取字符串或者字符完成后记得清理缓冲区,避免为后续的操作造成不必要的麻烦!!!
gets
gets函数用来读取字符串,除了\n不能读取之外啥都能读取,并且在完成读取的时候会自动在字符串末尾加\0,同时会清理掉这次遗留在缓冲区的\n;
实际上gets的读取机制是这样的:gets遇到\n就会停止读取,表示这次读取已经结束,并且会在末尾自动加上\0,同时完成缓冲区的清理(清理掉这次遗留在缓冲区的\n);
strcpy
是会将所有源头字符串的数据拷贝到目标字符串的,当然包括\0!!!
strcpy工作机制就是在源头字符串遇到\0,就停止拷贝,同时会把\0也拷贝进目标字符串;
strncpy
strcpy如果需要拷贝的个数(也就是n)大于源头字符串的长度,那么strncpy会将整个源头拷过来,对于多出来的个数n则用\0来填充:
如果如果需要拷贝的个数(也就是n)小于,等于源头字符串的长度,则strncpy就会拷贝需要的字符串个数,同时不会多此一举给你自动的把\0也拷贝过来:
strcat
字符串拼接函数,工作机制就是:在目标字符串末尾(\0位置处)开始拼接源头字符串,直到源头字符串遇到\0位置,当然strcat会将\0也自动拼接过去:
strncat
当我们需要拼接的个数大于源头字符串的个数那么strncat就等价于strcat,同时他不会像strncpy那样将多余的n用\0来填充;!!!
当我们需要拼接的个数小于、等于源头字符串的个数那么strncat就会有多少拼接多少,但是拼接完成过后会自动加上\0;
总结
当需求数n小于等于实际源头字符串长度时:
strncpy就会有多少拷贝多少,不会拷贝\0;
strncat就是有多少拼接多少,并且会在末尾自动添加\0;
当需求数n大于实际源头字符串长度时:
strncpy就会将有效数据先全部拷贝进目标数组,然后多出来的n就会用\0来填充;
strncat这时就等价于strcat,对于多余的n,不会用\0来填充;
本文标签: 关于’和n’的去留问题
版权声明:本文标题:关于‘’和‘n’的去留问题 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1732355066h1534195.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论