将字符串列表转换为 haskell 中的 c 数组

convert a list of strings to a c array in haskell

有几个说明如何将字符串转换为 CString,以便在使用 FFI 调用 C 时传递。我的问题是将字符串列表转换为 char **word 值,为此我在 Whosebug 或 hackage 中都找不到答案。

我看到一个选项:我可以使用 newCString 转换列表中的每个字符串,然后将它们提供给 newArray - 不要忘记释放保留的内存。

我想这个比较常见的操作应该有更好的选择吧?

不,我不认为这有什么用。 newCStringnewArray 已经足够简单了:

import Foreign.Ptr
import Foreign.C.String
import Foreign.Marshal.Alloc
import Foreign.Marshal.Array

makeCStringArray :: [[String]] -> IO (Ptr CString)
makeCStringArray arr = newArray =<< traverse newCString arr

freeCStringArray :: Int -> Ptr CString -> IO ()
freeCStringArray n ptr = do
  strs <- peekArray n ptr
  traverse free strs
  free ptr