C编程——为什么gets()不接受输入? #包括 int main() { 智力选择; char-sl[10]; char-phn[10]; printf(“输入选项:”); scanf(“%d”,选择(&C); 开关(选择) { 案例1: printf(“\n输入学生详细信息:\n\n”); printf(“\n输入序列号:”); 获取(sl); printf(“卷号:”); 获取(phn); 违约: 打破 } 返回0; }
C语言编程: 我在这里使用了2 get()函数。第二个有效,但第一个无效。为什么?如何让它工作 注意:我想将“sl”和“phn”变量作为char类型,并使用get()获取输入。 请有人帮助……切勿使用C编程——为什么gets()不接受输入? #包括 int main() { 智力选择; char-sl[10]; char-phn[10]; printf(“输入选项:”); scanf(“%d”,选择(&C); 开关(选择) { 案例1: printf(“\n输入学生详细信息:\n\n”); printf(“\n输入序列号:”); 获取(sl); printf(“卷号:”); 获取(phn); 违约: 打破 } 返回0; },c,scanf,C,Scanf,C语言编程: 我在这里使用了2 get()函数。第二个有效,但第一个无效。为什么?如何让它工作 注意:我想将“sl”和“phn”变量作为char类型,并使用get()获取输入。 请有人帮助……切勿使用get()。它不提供针对缓冲区溢出漏洞的保护(即,您无法告诉它您传递给它的缓冲区有多大,因此它无法阻止用户输入比缓冲区大的行并破坏内存) fgets()是安全的,因为您可以通过传递缓冲区大小(包括空值空间)来保证不会溢出输入字符串缓冲区 最重要的区别是fgets()知道字符串有多大 是,而get()
get()
。它不提供针对缓冲区溢出漏洞的保护(即,您无法告诉它您传递给它的缓冲区有多大,因此它无法阻止用户输入比缓冲区大的行并破坏内存)
fgets()
是安全的,因为您可以通过传递缓冲区大小(包括空值空间)来保证不会溢出输入字符串缓冲区
最重要的区别是fgets()
知道字符串有多大
是,而get()
不是。这意味着几乎不可能写作
使用gets()
安全代码,所以不要这样做
在那里,使用
fgets()
而不是gets()
对所有输入使用fgets()。scanf通常会在输入流中留下换行符,这将导致FGET出现问题。使用sscanf解析整数的输入,并检查返回值以确保输入了整数
#include<stdio.h>
int main()
{
int choice;
char sl[10];
char phn[10];
printf("Enter choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("\nEnter Student Details: \n\n");
printf("\nEnter serial number: ");
gets(sl);
printf("Roll number: ");
gets(phn);
default:
break;
}
return 0;
}
#包括
int main()
{
智力选择;
int结果=0;
char-sl[10];
char-phn[10];
字符输入[256];
做{
printf(“输入选项:”);
如果((fgets(输入,输入大小,标准输入))){
结果=sscanf(输入、%d、&choice);
如果(结果==0){
printf(“重试\n”);
}
}
否则{
fprintf(stderr,“获取输入的问题”);
返回1;
}
}而(结果!=1);
开关(选择)
{
案例1:
printf(“\n输入学生详细信息:\n\n”);
printf(“\n输入序列号:”);
if((fgets(sl,sizeof sl,stdin))==NULL){
fprintf(stderr,“获取序列号的问题”);
返回1;
}
printf(“卷号:”);
if((fgets(phn,phn的大小,stdin))==NULL){
fprintf(stderr,“获取卷号的问题”);
返回1;
}
打破
违约:
打破
}
返回0;
}
。改为使用。想一想:您为scanf
输入的数字用什么键结束输入?提示:Enter
键也将作为换行符放入输入缓冲区。gets
是危险的,不推荐使用(从C11标准中删除)。使用fgets
或者
#include <stdio.h>
int main()
{
int choice;
int result = 0;
char sl[10];
char phn[10];
char input[256];
do {
printf("Enter choice: ");
if ( ( fgets ( input, sizeof input, stdin))) {
result = sscanf( input, "%d", &choice);
if ( result == 0) {
printf ( "try again\n");
}
}
else {
fprintf ( stderr, "problem getting input\n");
return 1;
}
} while ( result != 1);
switch(choice)
{
case 1:
printf("\nEnter Student Details: \n\n");
printf("\nEnter serial number: ");
if ( ( fgets ( sl, sizeof sl, stdin)) == NULL) {
fprintf ( stderr, "problem getting serial number\n");
return 1;
}
printf("Roll number: ");
if ( ( fgets ( phn, sizeof phn, stdin)) == NULL) {
fprintf ( stderr, "problem getting roll number\n");
return 1;
}
break;
default:
break;
}
return 0;
}