这道题的代码。
#include<stdio.h>
#include<string.h>
int main( ) {
char a[80];
while(1) {
gets (a) ;
int k=(int) strlen(a) ;
for (int i=0; i<k;i++)
{ if(a[i]!=' ')
printf("%c", a[i]); }
printf("\n"); }
return 0; }
我发现的问题:在mac当中的xcode中使用gets()函数时,会导致有警告出现:gets unsafe,说明了gets函数的不安全。
gets(),因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。
而 接下来介绍一个新的函数fgets()
fgets函数fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加'\0',并以str作为函数值返回。