У меня есть какой-то C код, который я пытаюсь понять, который использует функцию __isoc99_scanf()
. Я никогда не сталкивался с этой функцией раньше. Я посмотрел его, и оказалось, что это какая-то разновидность scanf()
. Это код:
__isoc99_scanf(&DAT_00400d18,local_78,(undefined4 *)((long)puVar3 + 4));
&DAT_00400d18
- это строка C, содержащая значение "%s"
. local_78
- массив данных неизвестного типа. puVar3
- это указатель, который указывает на последний элемент этого массива.
Что меня действительно смущает, так это почему у вызова функции есть три параметра? Я знаю, что scanf()
принимает два параметра: первый - строка формата. Второй - это адрес памяти, в который сохраняется дата. Однако __isoc99_scanf()
здесь вызывается с тремя параметрами. Я не могу понять, почему третий параметр там. Первый параметр &DAT_00400d18
- это просто "%s"
, что говорит о том, что вторым параметром является область памяти, в которой нужно сохранить эту строку. Но зачем вам третий параметр, даже если он не указан в строке формата?
Это не мой код, я его не писал. На самом деле это разобранная версия кода сборки для конкретного приложения, которую я пытаюсь отладить. Но я никогда не видел __isoc99_scanf()
раньше, потому что я использовал scanf()
только в своем собственном коде.