我有这段代码是应该要求用户输入一些信息:gets_s()是越来越跳过
char * nome = malloc(256);
char * cc = malloc(256);
char * morada = malloc(256);
char * tlf = malloc(20);
printf("Novo nome:");
gets_s(nome, sizeof(nome));
printf("Nova Morada:");
fflush(stdin);
gets_s(morada, sizeof(morada));
printf("Cartao de cidadao:");
fflush(stdin);
gets_s(cc, sizeof(cc));
printf("Novo Contacto:");
fflush(stdin);
gets_s(tlf, sizeof(tlf));
第一gets_s()
获取的跳过,我不明白为什么,我已经也尝试使用scanf("%s",nome)
,并试图用户通过堆栈溢出发现一些解决方案,因为据我了解scanf()
会发生什么是最后一个字符实际上是“自动”读取的,因为它没有在之前的scanf()
,但我不认为这是事实,因为我已经尝试了所有我能找到的建议。 任何人都可以阐明为什么会发生这种情况?
编辑:
char nome[256];
char cc[256];
char morada[256];
char tlf[20];
printf("Novo nome:");
fflush(stdin);
scanf("%s", nome);
printf("Nova Morada:");
fflush(stdin);
scanf("%s", morada);
printf("Cartao de cidadao:");
fflush(stdin);
scanf("%s", cc);
printf("Novo Contacto:");
fflush(stdin);
scanf("%s", tlf);
1)'fflush(stdin);'调用未定义的行为2)您不检查'malloc'和'gets_s'的任何结果。 3)边界检查接口是可选的。为什么不使用'fgets'? 4)指针不是数组。 5)获取你的C书并阅读'sizeof'的功能。 – Olaf
我感谢您的评论。首先你说“调用未定义的行为”是什么意思? 我已经按照你的建议使用了fgets(),但结果是一样的,我抛弃了fflush(),因为我从你的评论中了解到它的行为没有定义,因此它不清楚缓冲区。 仍然得到相同的结果 – LikeIfYouCaredAboutMyName
你最大的问题是以不恰当的方式使用'sizeof'。 – DyZ