4
我有一個C函數,它創建一個以空字符結尾的字符串並返回一個指向它的指針,還有相應的釋放函數。peekCString和peekCStringLen是否懶惰?
foreign import ccall unsafe "get_str" getStr :: IO CString
foreign import ccall unsafe "free_str" freeStr :: CString -> IO()
我想盡快從返回的CString的,和免費的CString創建一個Haskell字符串。
do cStr <- getStr
str <- peekCString cStr
freeStr cStr
-- here str is used
使用str之前釋放cStr是否安全?換句話說,peekCString是一次創建Haskell String還是懶惰地創建?
如果我有一個C函數,沒有副作用和返回一個字符串,我可以欺騙哈斯克爾以爲'getStr >> = peekCString'不是'IO String',而是'String'?它在http://hackage.haskell.org/package/base-4.7.0.2/docs/src/Foreign-C-String.html#peekCString中聲明爲'peekCString :: CString - > IO String' –