2 c
每行输入都是一行,命令后跟数字(退出情况除外).
我无法弄清楚我做错了什么.此段正在查找store命令,然后操作存储需要:
char command[20];
while(strcmp(command, "exit") != 0)
{
/*scans for command strings inputted*/
scanf(" %s", command);
/* handles store command*/
if(strcmp(command, "store") == 0)
{
memory[0] = 1;
scanf("%d %d %d %d %d", &startx, &starty, &finishx, &finishy, &number);
for( i = startx; i < finishx; i++)
{
for(j = starty; j < finishy; j++)
{
square[i][j] = number;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
是的,你错误地使用它(a).这条线:
scanf(" %s", command);
Run Code Online (Sandbox Code Playgroud)
有没有边界的输入检查.如果有人在您的程序中输入超过19个字符,它将溢出char command[20]并导致未定义的行为.
两个主要问题scanf是:
%s因为没有办法控制输入的数据量,所以使用它是无限制的.我最喜欢的说法是scanf扫描格式化的信息,并且格式化程度远远低于用户输入.如果你想做得对,请看这里.它用于fgets获取一条线,防止缓冲区溢出和检测问题.
一旦你sscanf把这一行作为一个字符串,你可以放心地把它放在心里,因为你知道长度的上限,你总是可以回到字符串的开头重新扫描(不是一个容易做的事情.输入流).
(a)从 语法上讲,你所拥有的是正确的.但是,从实际的语义角度来看(即,您的意思是发生什么情况与可能发生的情况相比),您的代码中有一个漏洞足以通过空中客车A380飞行:-)