如何将haskell[char]转换为CString
我在haskell中的代码有一些错误: 无法将类型“[Char]”与“Ptr CChar”匹配 预期类型:CString 实际类型:[Char] 源代码:如何将haskell[char]转换为CString,c,haskell,C,Haskell,我在haskell中的代码有一些错误: 无法将类型“[Char]”与“Ptr CChar”匹配 预期类型:CString 实际类型:[Char] 源代码: {-# LANGUAGE ForeignFunctionInterface #-} module Main where import Foreign.C -- get the C types import Foreign.Ptr (Ptr,nullPtr) import Foreign.C.String foreign import cc
{-# LANGUAGE ForeignFunctionInterface #-}
module Main where
import Foreign.C -- get the C types
import Foreign.Ptr (Ptr,nullPtr)
import Foreign.C.String
foreign import ccall "stdio.h printf"
myprintf :: CString -> IO CString
main = do
myprintf "hello"
文本“hello”
的类型为String
(也称为[Char]
),而不是CString
,因此无法将其传递给myprintf
。类型不匹配
您可以通过以下方式将其转换为CString
:
main=do
C中的strprintf
是一个可变函数,我不确定我们是否可以如此轻松地导入它,忽略参数的可变部分。也许我们可以使用ccall
。此外,我认为必须手动释放CString
(?),问题是将String
转换为CString
不是一个纯粹的操作。@FyodorSoikin啊,对。我把这种情况与别名类型已经有实例的情况混淆了,在这种情况下,别名不足以创建单独的实例。为什么“stdio.h printf”
而不是“printf”
?在一些示例中,我看到了这种做法
main = do
str <- newCString "hello"
myprintf str
main =
myprintf =<< newCString "hello"