我试图使用得到存储的名称/小短语得到休息的周期基于C
它应该保持39个字符,但在我进入的第一个字符返回到上一个周期。 (我有一个虽然显示主要内容)
它为什么不工作,假设?
char nome[40];
printf("\nNome do Equipamento: ");
gets(nome);
strcpy(eq[n].nomeEquipamento, nome);
我试图使用得到存储的名称/小短语得到休息的周期基于C
它应该保持39个字符,但在我进入的第一个字符返回到上一个周期。 (我有一个虽然显示主要内容)
它为什么不工作,假设?
char nome[40];
printf("\nNome do Equipamento: ");
gets(nome);
strcpy(eq[n].nomeEquipamento, nome);
在您所提供的链接,还有一个scanf
呼叫前gets
printf("\nCodigo do Equipamento: ");
scanf("%d",&codigo);
eq[n].codDipositivo=codigo;
printf("\nNome do Equipamento: ");
gets(nome);
的scanf
电话留下\n
字符按输入键后。这\n
字符被读取gets
,这就是为什么你面临这个问题。
要使用此\n
,请在scanf
之后使用getchar
表格;
printf("\nCodigo do Equipamento: ");
scanf("%d",&codigo);
getchar(); // To comsume '\n'
eq[n].codDipositivo=codigo;
printf("\nNome do Equipamento: ");
gets(nome);
现在约为gets
;高兴地坐在那邪恶gets
现在是一个历史。改为使用fgets
。
也不要使用strcpy
,而应该使用strncpy
(在使用之前,请仔细阅读prrovided链接)。
非常感谢你!我添加了fflush(stdin);在scanf和fgets之前,它现在可以工作了! – Pedro
@Pedro;不要使用'fflush(stdin)'。如果您不在MS-DOS上,它会调用**未定义的行为**。 – haccks
在提示使用它之前,你应该总是提到'strncpy'中的缺陷。否则,你只能将一个漏洞切换到另一个漏洞。 – user694733
首先要明白强制性:'gets'是_evil_。甚至没有'goto'有点邪恶。从“永远不要使用它,不管环境如何”这个意义上来说,这是邪恶的。这本质上是一个步行安全漏洞。 既然这样 - 请告诉我们主要功能的其余部分,不能告诉任何事情。 – Cubic
C语言中不再有一个函数叫做gets,它在2年前被删除。 – Lundin
@Pedro请发布完整的代码。 – Lundin