Никогда используйте обнаженный (неограниченный) %s
в scanf
, если вы не полностью контролируете формат входных данных (чего у вас нет).
В противном случае вы открываетеваш код для переполнения буфера.
Что вам нужно сделать, это fgets
строка из stdin
(поскольку это обеспечивает защиту от переполнения буфера), а затем просто sscanf
строка.
Thisимеет дополнительный бонус, что вы можете sscanf
свою длинную строку формата с четырьмя аргументами и, если это не удастся, , то попробовать один с двумя аргументами.
Примерно так:
#include <stdio.h>
int main (void) {
char buffer[200];
int i1, i2, i3, count;
printf("Please enter input in format: (-blackwhite | -color) colorvalue: ");
fflush (stdout);
if (fgets (buffer, sizeof (buffer), stdin) != NULL) {
if ((count = sscanf (buffer, " -color %d %d %d", &i1, &i2, &i3)) != 3)
count = sscanf (buffer, " -blackwhite %d", &i1);
switch (count) {
case 1: printf ("blackwhite %d\n", i1); break;
case 3: printf ("color %d %d %d\n", i1, i2, i3); break;
default: printf ("Huh?: %s\n", buffer); break;
}
}
return 0;
}