char arr[] = { 110,111,112,0,123,98,99 }; // nop
char arr[n] = {110,111,112,110,123,98,99}; // 如果n大于后面元素个数,才会输出正常
scanf(“%9s”,ch); // 可以通过在scanf里面的%s加一个数字来限制接收字符个数
- gets():
功能:从标输入读入字符,并保存到指定的内存空间,直到出现换行符或读到文件结尾为止
参数:s:字符串首地址
返回值:
成功:读入的字符串
失败:NULL
gets(str) 与scanf (“%s”,str)的区别:
gets(str)允许输入的字符串含有空格
scanf (“%s”,str)不允许含有空格
注意:由于scanf()和gets()无法知道字符串s大小,必须遇到换行符或读到文件结尾为止才接收输入,因此容易导致字符数组越界(缓冲区溢出)的情况。
代码:
char ch[100];
//通过键盘获取一个字符串
gets(ch);
printf(“%s\n”, ch);
补充:
// 通过正则表达式 获取带空格字符串
scanf(“%[^\n]”, ch); // 接收除\n以外所有的内容
- fgets():
功能:从stream指的文件内读入字符,保存到所指定的内存空间,直到出现换行字符、读到文件结尾或是已读了size - 1个字符为止,最后会自云加上字符”\0’作为字符串结束。
参数:
s:字符串
size:指定最大获取字符串的长度(size-1)
stream:文件指针,如果读键盘输入的字符串,定写为stdin
返回值:
成功:成功读取的字符串
失败:读到文件尾或出错:NULL
fgets()在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。通过scanf和gets输入一个字符串的时候,不包含结尾的“\n”,但通过fgets结尾多了“\n”。fgets()函数是安全的,不存在缓冲区溢出的问题。
代码:
char ch[10];
// “hello\n\0”
// fgets可以接收空格
// fgets获取字符串少于元素个数会有\n 大于等于 没有\n
fgets(ch,sizeof(ch),stdin);
printf(“%s”, ch);