【发布时间】:2022-11-30 03:25:40
【问题描述】:
我正在尝试创建一个读取一些字符串的程序,但是当我测试一个很长的字符串时,会发生溢出,并且我已经看到的所有解决方案都不起作用。下面的代码是:
#include <stdio.h>
int main()
{
char nome[201] = {0};
char cpf[15] = {0};
char senha[101] = {0};
scanf("%200s", nome);
scanf("%14s", cpf);
scanf("%100s", senha);
printf("nome: %s\n", nome);
printf("cpf: %s\n", cpf);
printf("senha: %s\n", senha);
return 0;
}
此代码应该防止溢出,但以下字符串:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaassssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
我试图将字符串放入所有输入中,当涉及到第二个时,程序完成并且溢出内容转到第三个字符串。
【问题讨论】:
-
scanf("%200s", nome);最多读取 200 个非空白字符,将其余字符留在stdin中以供下一个输入函数使用。代码正在按应有的方式运行。你的期望是错误的。如果你想消耗和抛出超过 200 个字符,你需要其他代码。 -
爱德华多莫斯卡,缓冲防止溢出。 3“aaa ... sss”输入你想要什么输出?
-
我想要的输出是字符串受限的变量,而不是跳过此输入的第三个变量。例如,在第二个变量中,我只需要此输入的前 14 个字符,最后一个输入也相同
-
爱德华多·莫斯卡,好的。如果输入是
"aaa bbb ccc\n" "ddd eee fff\n" "ggg hhh iii\n",你想要什么输出? (如果输入行包含空格?) -
输出需要相同,因为这些输出的长度都不大于分配给变量的内存。
标签: c