2013-07-02 2 views
4

У меня есть эта функция работать, которая печатает значение в качестве offsetmap:Получить результат в строковую переменную в OCaml

let pretty_offsetmap_original lv fmt offsetmap = 
    begin match offsetmap with 
    | None -> Format.fprintf fmt "<BOTTOM>" 
    | Some off -> 
    let typ = Some (typeOfLval lv) 
    in 
    Format.fprintf fmt "%a%a" 
     pretty_lval_or_absolute lv 
     (Cvalue.V_Offsetmap.pretty_typ typ) off 
end 

Теперь я хотел бы получить значение в переменной строки, чтобы преобразовать его в мой цель. Я заменил Format.fprintf fmt на Printf.sprintf, но он не работает. Ошибка компиляции:

Error: This expression has type 
     Format.formatter -> Cvalue.V_Offsetmap.t -> unit 
    but an expression was expected of type unit -> 'a -> string 

ответ

4

К сожалению, вы все верно: Format.sprintf не имеет хорошего типа. В пределах Frama-C функция Pretty_utils.sfprintf сделает именно то, что вам нужно. Вы также можете посмотреть на Pretty_utils.to_string.

+0

Это работает, спасибо большое Борис – user2544482

3

Похоже, вы должны были бы заменить Format.fprintf с Format.sprintf не с Printf.sprintf.

+2

К сожалению, это не относится к типу 'Format.sprintf'. 'Format.sprintf"% a "' имеет тип '(unit -> '_a -> string) ->' _a -> string' вместо' (Format.formatter -> '_a -> string) ->' _a - > string' – byako

 Смежные вопросы

  • Нет связанных вопросов^_^