C语言基础--数组( 二 )


文章插图
打印字符串的时候遇到'\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 , 依旧会存储 , 此时会自动覆盖后面空间的内容,会造成内存污染
fgets
C语言基础--数组

文章插图
示例:
#include<stdio.h>int main(){ char buf[5] = ""; fgets(buf, sizeof(buf), stdin); printf("%s\n", buf); return 0;}运行结果如下:
C语言基础--数组

文章插图
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去掉就可以了 。
字符数组输出函数printfchar buf[1024] = "hello world";printf("%s\n",buf)打印字符串的时候遇到'\0'就停止打印 。
puts*

推荐阅读