关于c语言gets函数实例的信息

C语言gets函数是的,如果这是某书上的做法,那么,我只能说它为你们提供了一个错误的榜样 。
这样使用gets()已经发生了溢出!这是gets()不检查数据边界的bug造成的 。
另外,“字符串不是总是以'\0'作为串的结束符”,答案是肯定的 , 不然puts()函数就不能在合适的地方停下来了 。这里st[15]被gets()函数赋值为'\0' 。这里要说明的是st[15],st[16]是存在而不合法的,因为字符串实际上就等同于指针 , 类似st[16]是实在的地址但是是不应该被引用的 。
为什么这里溢出没有产生错误?可能系统分配内存是以一个最小的大小整段整段的分配(这个我只是猜测) 。你可以试着输入的字符串变长一点 , 就可以看到内存读写出错的提示了,这就是溢出的严重后果!我在DOS系统下测试字符串长了直接当机 。
验证1:st[15]被赋值为'\0'
#include"stdio.h"
main()
{
charst[15];
printf("inputstring:");
gets(st);
puts(st);
printf("%d",st[15]);
【关于c语言gets函数实例的信息】getch();
}
验证2:
#include"stdio.h"
main()
{
charst[15];
printf("inputstring:");
gets(st);
puts(st);
//printf("%d",st[16]);
st[1]='\0';
printf("%s\n",st);
printf("%s",st+2);
getch();
}
同样的建议:拒绝gets(),这本来就是一个有bug的函数!
c语言gets的用法C语言中缓冲区就是内存中开辟的一块存储空间 。数组也是一个缓冲区 。或者你用内存操作函数自己去开辟一块内存空间也是缓冲区 。下面我们来看看c语言gets的用法 。
例:
void test7()
{
char str1[80];
char str2[80];
printf("please input aany 2 sentence:\n");
gets(str1);
scanf("%s",str2);
printf("string1 is:%s\n",str1);
printf("string2 is:%s",str2);
}
int _tmain(int argc, _TCHAR* argv[])
{
test7();
return 0;
}
输入:hello world
hello world
执行结果为:string1 is:hello world
string2 is :hello
C语言的get是怎样使用的呢?gets函数:从stdin流中读取字符串,直至读到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中 。
换行符不作为读取串的内容,读取的换行符被转换为 \0 空字符,并以此结束字符串;当使用unicode宽字符文本时,请使用宽字符版本函数 _getws() 。
gets函数可以无限读取 , 不会判断上限 , 所以使用时应确保buffer的空间足够大,以便在执行读取操作时不发生溢出 。
gets函数在C11标准中被移除,改为更加安全的gets_s函数;头文件:stdio.h;返回值:若读入成功,返回与参数buffer相同的字符指针 。
若读入过程中遇到EOF或发生错误,返回NULL指针 。所以当遇到返回值为NULL的情况时,应使用ferror或feof函数检查是发生错误还是遇到EOF 。
扩展资料
#include iostream
#include limits
#include cstdio
using namespace std;
int main()
{
int i_test, c;
printf("Please enter an integer: ");
scanf("%d", i_test);
printf("You just entered %d.\nPress enter to continue...", i_test);
while ( (c = getchar()) != '\n'c != EOF ) ;// 清空输入流
clearerr(stdin); // 清除流的错误标记
cin.get();// 等待用户输入回车
return 0;
}
c语言gets()的用法是什么?在前面从键盘输入字符串是使用 scanf 和 %s 。其实还有更简单的方法 , 即使用 gets() 函数 。该函数的原型为:
# include stdio.h
char *gets(char *str);
这个函数很简单,只有一个参数 。参数类型为 char* 型,即 str 可以是一个字符指针变量名,也可以是一个字符数组名 。gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间 。

推荐阅读