我试图弄清楚如何使用函数getstr of 这个蛋 (以及由此产生的mvgetstr、mvwgetstr等)。例如:
(require-extension ncurses)
(let ((stdscr (initscr)) (str (make-string 10)))
(getstr str)
(addstr str)
(getch))csi告诉我
错误:错误的参数类型-不是指针:“”
所以我试着用这个:
(require-extension ncurses)
(let ((stdscr (initscr)) (str (make-string 10)))
(begin
(getstr (object->pointer str))
(addstr str)
(getch)))) 这次csi给了我另一个错误:
错误:错误的参数类型-不是字符串:在堆栈执行终止中检测到已损坏的数据
我认为问题在于字符串的编码(函数认为是ascii和另一个utf-8)。我没有使用指针的经验,我只知道用这个蛋得到一根线的最好的防白痴方法。
发布于 2017-07-27 19:08:53
最后,我认为这是一个臭虫的诅咒蛋。这里,他们说这是一个错误,而且它是正确的,但我在上一个版本中也有同样的问题。
然而,这些函数并不真正类似于方案,使用getch (正确地工作)重新定义这些函数很简单。例如:
(define (mvgetstr x y)
(move y x)
(let loop ((str ""))
(let ((ch (getch)))
(if (eq? (char->integer ch ) 10) ;10 is the ENTER KEY code
str
(loop (string-append str (string ch)))))))编辑:另一个用户建议了一种使用此功能的方法,以及类似的方法:
(use ncurses lolevel data-structures)
(define (get-string max)
(let ((buffer (make-string max #\null)))
(getnstr (make-locative buffer) max)
(string-translate buffer #\null)))
(let ((stdscr (initscr))
(str (get-string 10)))
(addstr str)
(getch)
(write str))发布于 2020-04-03 04:39:09
这似乎适用于鸡肉计划的第5版:
(import ncurses
(chicken locative)
(chicken string))
(let ((stdscr (initscr)) (str (make-string 10)))
(getstr (make-locative str))
(addstr (string-translate str #\null))
(getch)
(endwin))https://stackoverflow.com/questions/45266152
复制相似问题