gets函数返回值,c语言的gets函数编译不成功阿,很短的程序?
gets函数返回值,c语言的gets函数编译不成功阿,很短的程序?详细介绍
本文目录一览: 关于gets函数的返回值
gets(str) 在读取成功的时候返回str,str保存的是成功读入的内容
在失败的时候返回NULL,str的内容保持不变
明白了么?
返回的是一个char型的指针值指向结束字符。但是3的ASCII码值是51,你要是写while( *(ptr = gets(input)) != 51)或者while( *(ptr = gets(input)) != ‘3’)就可以了,你输入3的话是说不等于ASCII值为3的。
gets函数是getstring ,也就是输入字符串的意思,null可以是因为null也可理解为空字符串;而3只是整型数字,所以有问题。
格式不对的,怎么能结束呢
你输入的3 是整型 如果把他转化成字符型,肯定不等于 你程序里的3啊
当然不结束了啊
你改成'3'试试~3是个int数不是char型的
【1】函数:gets
【2】头文件:stdio.h
【3】功能:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在str指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
【4】注意:本函数可以无限读取,不会判断上限,所以程序员应该确保str的空间足够大,以便在执行读操作时不发生溢出。
【5】示例:
#include"stdio.h"
void main()
{
char str1[5];
gets(str1);
printf("%s\n",str1);
}
那句话的意思是说gets函数很危险(容易造成系统漏洞),最好不要用。但是不影响你的程序,还是可以照样运行的。
c语言中gets函数和是scanf函数有什么区别呢??
都是从输入流中读取数据,但功能有很大差别:
1
操作类型不同。
gets函数仅用于读入字符串。
scanf为格式化输出函数,可以读入任意C语言基础类型的变量值,而不是仅限于字符串(char*)类型。
2
截止字符不同。
gets函数固定的以换行符作为结尾,遇到换行符时结束输入。
scanf函数默认以空白函数结尾,同时可以对截止函数进行修改。
3
对截止字符处理不同。
gets函数会读入截止字符\n,
同时将\n自动替换为\0.
scanf遇到截止字符时不会继续读取,截止字符将存储于输入缓冲中。
4
返回值类型不同。
gets的返回值为char*型,当读入成功时会返回输入的字符串指针地址,出错时返回NULL。
scanf返回值为int型,返回实际成功赋值的变量个数,当遇到文件结尾标识时返回EOF。
gets函数和scanf函数都可以作为字符串的输入函数,
相同点:都是将从键盘输入的字符串存入数组中,输入完成后要以回车来结束输入。
不同点:利用sanf时,在输入过程中碰到空格时系统认为输入结束,并将空格之前的字符作为有效字符存入数组中,并在尾部追加\0作为结束标志。利用gets时,空格符被看作是有效字符,也就是说只有碰到回车符时系统才认为输入结束。
是不是这代码前面还有什么输入语句,反正在我电脑上运行结果一样.
gets与scanf的区别是gets一次读一行,scanf遇到空格回车结束!
gets函数是输入一行字符串,以回车结束,并且回车键会被过滤掉,不会被读到字符串中。
getchar()是读取一个字符,包括回车键也会被读成一个字符。
这个程序在输入name[i]前,用getchar()把之前scanf("%d",&num[i]);中,输入整数后按的回车键给读走,否则这个回车键会导致gets直接读到一个空字符串。
gets()函数的话会连zhanghao后面的回车也当做字符输入了,对比的话肯定就是跟zhanghao不一样;
gets(字符数组) 怎样得到函数值?怎样得到字符数组的起始地址?
gets读入一行字符,返回值是char*
原型
char*gets(char*s)
一般是定义一个字符数组,或者定义一个指针分配内存
比如
char s[100];
gets(s);
这样
输入的字符串会存到s里面,起始地址是数组名,也就是s
返回值,在输入正确的时候返回参数s的值
出错时返回null
所以有时会这样
while(gets(s))
puts(s);
char s[100];
gets(s);
puts(s);
这样就可以得到输入 s的值。
1.gets(字符数组) 怎样得到函数值
这个问题没看懂,gets配合字符数组是输入用的呀,和函数值有什么关系?
如果你要用gets输入一个字符数组,可以:
2.怎样得到字符数组的起始地址
数组名代表数组的起始地址,用gets输入字符数组后,用取地址符输出地址,如下:
C语言gets函数的用法,能用代码举个例子么
c语言,gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符。
其调用格式为:gets(s)。其中s为字符串变量(字符串数组名或字符串指针)。如果为单个字符指针,编译连接不会有错误,但运行后内存溢出错误。
扩展资料:
gets()函数用于从缓冲区中读取字符串,其原型如下:
char *gets(char *string);
gets()函数从流中读取字符串,直到出现换行符或读到文件尾为止,最后加上NULL作为字符串结束。
返回值,若成功则返回string的指针,否则返回NULL。
注意:由于gets()不检查字符串string的大小,必须遇到换行符或文件结尾才会结束输入,因此容易造成缓存溢出的安全性问题。
参考资料来源:百度百科-gets
c语言中gets函数可以用开输入int型的数组吗 比如int a【100】?如果可以怎么输入?
不行。gets() 是输入string.h头文件里头的函数 及处理字符的函数。。不能输入int型的数组
gets()函数是接收字符串的,不能放到整型数组中。你应该是想存放数字吧,你输入的每组数字之间的分隔符(比如空格)它一概接收,也就无法区分每组数据了。
不可以 get是用来获取字符的
只能接受字符数组
gets返回值是char *,你一定要用它,可以用char * 接收,然后迭代把char型数字转int型存储。但这样要判断还要处理位数,不麻烦么。
直接迭代scanf接收存储到int a,最后用判断把回车符号'\n'过滤掉,不简单么。
C语言的get是怎样使用的呢?
1、gets函数:原型:char * gets(char * buffer);功能:从stdin流中读取字符串,直至读到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为 \0 空字符,并以此结束字符串;说明:当使用unicode宽字符文本时,请使用宽字符版本函数 _getws()。gets函数可以无限读取,不会判断上限,所以使用时应确保buffer的空间足够大,以便在执行读取操作时不发生溢出。gets函数在C11标准中被移除,改为更加安全的gets_s函数;头文件:stdio.h;返回值:若读入成功,返回与参数buffer相同的字符指针。若读入过程中遇到EOF或发生错误,返回NULL指针。所以当遇到返回值为NULL的情况时,应使用ferror或feof函数检查是发生错误还是遇到EOF。2、例程:
#include
int main(){ char buffer[5];//定义缓存字符数组buffer gets(buffer);//用gets函数从stdin流中读入字符串,因为buffer长度是5,输入不能超过4个字符 printf("%s",buffer);//在stdout流中输出读入的字符串 return 0;}
getchar() 这个函数在调用之后 你输入s 再按回车键,这个时候键盘会给出两个值一个是0A 一个是0D 对应10进制就是 10 13,其作用分别为回车 换行。 回车 说白了,告诉系统这一行结束了,但是并不换到下一行,想要换行就用到换行了。
但是在你用getchar之后,s会被接收了,但是回车 换行被系统从键盘缓冲区清空了。你可以换一个函数 getch() 这个函数只读你s ,后面的回车还是被清空,但是换行都保留 你继续用 getch 可以把里面的数据读取出来,然后打印出来。
例子如下:
#include
#include
int main(int argc, char *argv[])
{
char a = 0, b = 0;
a = getch();
b = getch();
printf("%d , %d",a,b);
return 0;
}
说明一下 getch 你输入之后,屏幕不会显示。你如果连续点击a 那么会得到两个97 。 如果点a,然后再回车,这个时候得到的是 97 13
gets函数:从stdin流中读取字符串,直至读到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。
换行符不作为读取串的内容,读取的换行符被转换为 \0 空字符,并以此结束字符串;当使用unicode宽字符文本时,请使用宽字符版本函数 _getws()。
gets函数可以无限读取,不会判断上限,所以使用时应确保buffer的空间足够大,以便在执行读取操作时不发生溢出。
gets函数在C11标准中被移除,改为更加安全的gets_s函数;头文件:stdio.h;返回值:若读入成功,返回与参数buffer相同的字符指针。
若读入过程中遇到EOF或发生错误,返回NULL指针。所以当遇到返回值为NULL的情况时,应使用ferror或feof函数检查是发生错误还是遇到EOF。
扩展资料
#include
#include
#include
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(a)是什么意思
gets是get string的缩写,简言之就是从输入流中读取一串字符串,并放入其参数指向的地址中。
扩展资料:
gets()函数用于从缓冲区中读取字符串,其原型如下:char *gets(char *string);gets()函数从流中读取字符串,直到出现换行符或读到文件尾为止,最后加上NULL作为字符串结束。所读取的字符串暂存在给定的参数string中。由于gets()不检查字符串string的大小,必须遇到换行符或文件结尾才会结束输入,因此容易造成缓存溢出的安全性问题,导致程序崩溃,可以使用fgets()代替。
如果你定义一个字符数组char a[10];这样定义gets(a);就表示从键盘接收一个字符串,并放到数组a中,
如果是char *a;这样定义a;
a=(char*)malloc(N*sizeof(char));就表示从键盘接受一个字符串,并且以a为首地址开始存放字符,
给你个例子,
#include"stdio.h"
#include
#define N 10//表示开辟空间的大小,
void main()
{
char a[10],*b=(char*)malloc(N*sizeof(char));
printf("please input the string a :");
gets(a);
puts(a);
printf("please input the string a :");
gets(b);
puts(b);
}
若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格
和scanf差不多相同,只是scanf是单个输入,而这个是字符串输入
输入一段字符串。
c语言里gets(a) 表示输入一个字符串到数组a,a表示读取一个字符串存入a中,字符串输入结束标志为换行符。
比如 输入321 cs dd回车
a中存储为 321 cs dd
扩展资料:
gets函数相关知识:
1、注意事项:gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以编程时应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。
2、功能:从stdio流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。
3、返回值:读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。
参考资料:百度百科gets函数
C语言getchar()和gets()的用法
实际上getchar函数是从缓冲区读取数据的,而不是从你的屏幕上读取数据.
键盘负责往缓冲区写入数据,而getchar函数负责读取数据.
getchar函数不会关心你实际输入的是什么,它只负责从缓冲区读取数据,而且每次读取一个字符.
你点击键盘的时候,实际上是往缓冲区输入:
你按下a,则缓冲区中保存了一个字符a
你按下b,则缓冲区中又保存了一个字符b
你按下c,则缓冲区中又保存了一个字符c
你按下1,则缓冲区中又保存了一个字符1
你按下backspace删除键,则缓冲区中删除了一个字符(最后保存的那个1)
除非你按下Enter,不然你其实就是在往缓冲区中塞数据.
关键点来了:当你按下Enter的时候,发生了两个动作.首先是往缓冲区保存了一个'\n'字符,然后才执行刷新
刷新其实就是告诉getchar(或者任何需要读取这个缓冲区的函数,比如scanf),现在你可以开始读取我保存的数据了.
getchar()读入一个字符,注意是一个(‘x’之类的就是一个字符)
gets()读入一个字符串(“xxxx”)不接受换行符
puts()根据gets()来输出
getchar()不用传参数
gets()遇到换行符就终止读取,会读取所有可打印符号,包括开头结尾的空格等
puts()和putchar()都会自动换行
getchar()得到的是字符如getchar('a'),gets是字符串如gets("阿凡达");是输入的字符
C语言getchar()和gets()的用法:
1、gets读一行,getchar()读一个字符。
2、函数用法:1)gets()用于从标准输入流stdin读入一个整行(以'\n'或EOF)结束,写入ptr指向的字符数组,并返回这个指针;出错或遇到文件结束时则返回NULL。行末的'\n'从流中取出,但不写入数组。gets()不检查被写入的数组大小。
2)getchar()用于从标准输入流stdin读入一个字符,并返回这个字符。如果读到文件结尾,则返回EOF。注意到EOF不能用char类型表示,所以getchar()函数返回的是一个int型的数。使用时也应该注意这一点。
拓展资料:
getchar是读入函数的一种。它从标准输入里读取下一个字符,相当于getc(stdin)。返回类型为int型,为用户输入的ASCII码或EOF。
gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。
C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。
C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括一些类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
参考资料:
百度百科——getchar
百度百科——gets
百度百科——C语言
c语言的gets函数编译不成功阿,很短的程序?
C语言的gets函数一般包含在stdio.h头文件里,如果没有包含比头文件那可能会有问题。第二种情况包含了还出问题,说明你的编译器已经不支持这个函数了,这个函数非常不安全,容易造成溢出,建议换成fgets函数。函数原型:char *fgets(char *buf, int bufsize, FILE *fp);参数解释:参数一是输入字符串存放地址,参数二是存放地址最大容量,参数三是从哪里输入,可以从文件也可从输入设备,如果从输入设备输入这个参数可以写成stdin,如果从文件输入此参数为文件指针。返回值:输入成功返回参数一,失败返回NULL.补充知识:为什么gets不让用呢,我们可以看它的原型:char *gets(char *buf);这个函数可以一直输入知道换行或者EOF,它并不考虑buf空间是否足够大能放下,这就容易导致溢出,有些别有用心的人就会利用这个漏洞去攻击你的程序。而fgets可以通过第二参数保证不会读入超过buf空间的字符。
C语言的gets函数一般包含在stdio.h头文件里,如果没有包含比头文件那可能会有问题。第二种情况包含了还出问题,说明你的编译器已经不支持这个函数了,这个函数非常不安全,容易造成溢出,建议换成fgets函数。函数原型:char *fgets(char *buf, int bufsize, FILE *fp);参数解释:参数一是输入字符串存放地址,参数二是存放地址最大容量,参数三是从哪里输入,可以从文件也可从输入设备,如果从输入设备输入这个参数可以写成stdin,如果从文件输入此参数为文件指针。返回值:输入成功返回参数一,失败返回NULL.补充知识:为什么gets不让用呢,我们可以看它的原型:char *gets(char *buf);这个函数可以一直输入知道换行或者EOF,它并不考虑buf空间是否足够大能放下,这就容易导致溢出,有些别有用心的人就会利用这个漏洞去攻击你的程序。而fgets可以通过第二参数保证不会读入超过buf空间的字符。
说明你的gets函数根本没有声明啊,去定义一个函数在实现就好了
应该是头文件没有引用,或者头文件出问题了
编译问题。这个是一个警告。我记得以前有看过,是说,gets没有限制输入字符的长度,你的数组a是100字节,如果输入101字节会溢出。只是建议你少用,用别的替代。
C语言的gets函数一般包含在stdio.h头文件里,如果没有包含比头文件那可能会有问题。第二种情况包含了还出问题,说明你的编译器已经不支持这个函数了,这个函数非常不安全,容易造成溢出,建议换成fgets函数。
函数原型:
char *fgets(char *buf, int bufsize, FILE *fp);
参数解释:
参数一是输入字符串存放地址,
参数二是存放地址最大容量,
参数三是从哪里输入,可以从文件也可从输入设备,如果从输入设备输入这个参数可以写成stdin,如果从文件输入此参数为文件指针。
返回值:
输入成功返回参数一,失败返回NULL.
补充知识:
为什么gets不让用呢,我们可以看它的原型:char *gets(char *buf);
这个函数可以一直输入知道换行或者EOF,它并不考虑buf空间是否足够大能放下,这就容易导致溢出,有些别有用心的人就会利用这个漏洞去攻击你的程序。
而fgets可以通过第二参数保证不会读入超过buf空间的字符。