文章插图
打印字符串的时候遇到'\0'就停止打印,字符数组含有'\0'就是字符串 。
注意:char c[] = "hello",用" "括起来的就是字符串 , 此时编译器会自动在后面加上\0,在内部其实是这样的额char c[] = {'h','e','l','l','o','\0'} 。
scanf和getsscanf 遇到空格结束,遇到\n结束,所以用scanf这种方式并不是很好,有时候想要读取一个hello world遇到空格结束,只能读取到hello 。
- gets(str)允许输入的字符串有空格
- scanf不允许含有空格
- 但是scanf和gets都有一个很致命的缺点,就是如果存放读取字符的空间不足,会自动向后存储 , 会造成内存污染,假设给定的字符空间是num[5]大小是5,但是如果输入的字符大小超过5 , 依旧会存储 , 此时会自动覆盖后面空间的内容,会造成内存污染
![C语言基础--数组](http://img.zhejianglong.com/231018/21313HO0-5.png)
文章插图
示例:
#include<stdio.h>int main(){ char buf[5] = ""; fgets(buf, sizeof(buf), stdin); printf("%s\n", buf); return 0;}
运行结果如下:![C语言基础--数组](http://img.zhejianglong.com/231018/21313LZ1-6.png)
文章插图
fgets会把回车键\n读取,但是scanf和gets遇到\n会结束读取 。
有一种情况 , 定义了一个数组char a[3];,输入的时候输入的是a+回车,那么此时用fgets获取char数组内的内容就是a[3] = {'a','回车','\0'};
如何去掉\n?
只需要将\n替换成\0
示例:
char buf[128] = "helloA";//buf[5]=0;int i=0;while(buf[i]!='\0'){ i++;}buf[i-1] = '\0';printf("%s\n",buf);
strlensize_tnstrlen(const chars);功能:计算指定指定字符串s的长度,不包含字符串结束符‘\0’
参数:s:字符串首地址
返回值:字符串s的长度 , size_t为unsigned int类型
fgets相对于scanf和gets不会污染内存(安全),但是fgets会读取\n,所以只需要将\n去掉就可以了 。
字符数组输出函数printf
char buf[1024] = "hello world";printf("%s\n",buf)
打印字符串的时候遇到'\0'就停止打印 。puts*
推荐阅读
- 累加和为 K 的子数组问题
- C++和Java多维数组声明和初始化时的区别与常见问题
- 可持久化数组 P3919 【模板】可持久化线段树 1
- LeetCode - 数组的旋转总结
- .NET源码学习 [算法2-数组与字符串的查找与匹配]
- LeetCode - 二维数组及滚动数组
- 1975属兔的最佳车牌号三位数组合 幸运车牌数字推荐?
- 2021年广东高考成绩如何计算 2023广东高考成绩分数组成+计算方式
- 12生肖最幸运手机号尾数 最热门的手机靓号数组?