我有作业,应该分析这个C程序并回答三个问题。这是程序:
int main()
{
// Define buffers to store username and password
char username[16];
char password[16];
// Read username and password from user input
printf("Enter your name: ");
scanf("%s", username);
printf("Enter your password: ");
scanf("%s", password);
printf("[SHOUTING OUT LOUD] Hello, %s!\n", username);
return 0;
}
这些是问题:
我认为问题在于scanf方法,因为可以扫描的字符数没有限制。因此,我认为通过输入长字符串可能会导致分段错误,因为您要将字符保存在内存中,而用户不能引用这些字符。这将是我对2的答案。3的答案是可以通过限制可以扫描的字符数来更正程序。但我似乎找不到1的答案。您能帮我解决这个问题吗?
想象实现是否将用户名和密码连续存储在内存中。在输出密码之前,停止打印语句至关重要。但是,只有在用户名字段中遇到零字节时,它才会这样做。如果用户名太长,则用户名字段中将没有零字节,因此打印可以继续输出密码字段的内容。