Невозможно обрезать строку (байты) в OCaml 4.05 - PullRequest
0 голосов
/ 26 апреля 2020

Используя этот код

let _ =
  let buffer = Bytes.create 100 in
  let bytes_read = Unix.read Unix.stdin buffer 0 100 in
  print_endline (String.escaped (String.trim buffer))

Я получаю

asd\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000

при вводе строки "asd", что означает, что символ \n не обрезается из буфера. Это из-за различной реализации строк в более поздних версиях OCaml? Что здесь происходит?

Я использую OCaml 4.05.0, ARM CPU (RockPro64), Ubuntu 18.

1 Ответ

0 голосов
/ 26 апреля 2020

Что делает String.trim, так это удаляет пробелы в начале и конце строки. Ваша строка не имеет пробелов в начале (она начинается с 'a') и не имеет пробелов в конце (она заканчивается на '\ 0').

Один из способов продолжить это извлечь строку, которая на самом деле читали, что-то вроде этого:

let buffer = Bytes.create 100 in
let bytes_read = Unix.read Unix.stdin buffer 0 100 in
let real_string = String.sub buffer 0 bytes_read in
print_endline (String.escaped (String.trim real_string))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...