Я написал этот код:Почему исключение, в котором указано «Ошибка проверки выполнения во время выполнения № 2», был поврежден стек вокруг переменной «f». брошенный здесь?
void f1(void)
{
sprintf("\nf1.");
}
void f2(void)
{
sprintf("\nf2.");
}
void f3(void)
{
sprintf("\nf3.");
}
void f4(void)
{
sprintf("\nf4.");
}
int main()
{
// int i;
void (*f[4])(void);
f[1]=f1;
f[2]=f2;
f[3]=f3;
f[4]=f4;
(*f[1])();
(*f[2])();
(*f[3])();
(*f[4])();
/*for(i=0;i<4;i++)
{
(*f[i])();
}*/
getch();
}
Программа компилируется, запускается и показывает вывод
f1.
f2.
f3.
f4.
, но когда я нажимаю войти, он бросает исключение, указав «Run-Time Check Failure # 2 - Стопка вокруг переменной «f» была повреждена ».
Пожалуйста, объясните мне причину этого, а также когда следует использовать snprintf и sprintf. Кроме того, дайте мне знать, почему я не могу использовать
for(i=0;i<4;i++)
{
(*f[i])();
}
для указателя функции. Это также вызывает ошибку.
Примечание: 'sprintf' делает что-то ___ совершенно иное___, чем вы могли бы подумать. Вы хотите использовать 'printf'. См. Также http://en.cppreference.com/w/c/io/fprintf – Zeta