
正文
c语言getstr函数 c语言gets函数的用法
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C语言gets函数的用法,能用代码举个例子么
1、gets() 函数是从键盘输入字符串c语言getstr函数,该函数只有一个参数。参数类型为 char* 型,即 str 可以是一个字符指针变量名,也可以是一个字符数组名。打开编辑器,新建一个c语言文件,引入标准库并新建主函数:
2、gets() 函数c语言getstr函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间,这里的程序是用gets函数输入字符串,可以看到不像scanf那样需要使用%号,gets函数中直接传入字符串即可:
3、最后运行下程序,输入“i love you”,可以看到gets函数可以直接输出空格,而scanf函数输出空格则需要使用转义字符实现,因此gets函数的使用要比scanf简洁的多。以上就是gets函数使用方法的演示:
相关问答
Q1: C语言字符串gets(str)
在scanf("%c",ch);之后加上getchar();
#includestdio.h
int main(void)
printf("Input a character: ");
scanf("%c",ch);
fflush(stdin);//加上这句,清掉输入字符后,你再输入的回车符
printf("Input a string: ");
char str[80];
gets(str);
printf("%c\n",ch);
puts(str);
return 0;
}
字符串
因为本函数可以无限读取,易发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值。
这个事实导致gets函数只适用于玩具程序,为了避免这种情况,可以用fgets(stdin) (fgets实际上可以读取标准输入,即大多数情况下的键盘输入),具体参阅fgets词条)来替换gets()。在V7的手册中说明:为了向后兼容,gets删除换行符,gets并不将换行符存入缓冲区。
以上内容参考:百度百科-gets
Q2: c语言gets()的用法是什么?
在前面从键盘输入字符串是使用 scanf 和 %s。其实还有更简单的方法,即使用 gets() 函数。该函数的原型为:
# include stdio.h
char *gets(char *str);
这个函数很简单,只有一个参数。参数类型为 char* 型,即 str 可以是一个字符指针变量名,也可以是一个字符数组名。gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。
下面将前面中使用 scanf 输入字符串的程序改一下:
# include stdio.h
int main(void)
{
char str[20] = "\0"; //字符数组初始化\0
printf("请输入字符串:");
gets(str);
printf("%s\n", str);
return 0;
}
输出结果是:
请输入字符串:i love you
i love you
扩展资料:
从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。
读入成功,返回与参数buffer相同的指针;
读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。
参考资料来源:百度百科-gets
Q3: 问两个C语言的小问题!
一
光秃秃c语言getstr函数的charc语言getstr函数,既可能相当于unsigned charc语言getstr函数,有可能相当于signed charc语言getstr函数,因编译器而异。有的编译器甚至提供了编译选项c语言getstr函数,由用户选择。
可参考
二
str[]是局部数组,getStr函数返回后,该数组空间释放了。main函数通过p指针去访问这段已释放的地址,出错是自然的。
char *str="abcd";则不同。对于双引号字符串,只要它不是给数组赋值(char str[]="abcd"就是给数组赋值),编译器就会为双引号字符串分配类似于全局变量的长期存在的空间。所以,虽然str这个指针本身是局部暂时存在的,但它指向的abcd字符串却是长期存在的,而且是在main都没开始执行的时候就开始存在了(跟全局变量一样。而不是在进入getStr时才分配空间)。
注意:char str[]="abcd"不会分配全局空间。这句只相当于
char str[]={'a','b','c','d','\0'};
Q4: C语言gets函数
是c语言getstr函数的,如果这是某书上的做法,那么,c语言getstr函数我只能说它为你们提供了一个错误的榜样。
这样使用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]);
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语言getstr函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言gets函数的用法、c语言getstr函数的信息别忘了在本站进行查找喔。








