<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    Thank a lot ! it works!<br>
    Lamine.<br>
    On 04/29/2014 03:52 PM, Sylvain Henry wrote:
    <blockquote
cite="mid:CAPmptcVCw3nGg0Qp+ntqNtmBeDu2XgvUNHHODcMZ8oOXK6UG0w@mail.gmail.com"
      type="cite">
      <div dir="ltr">To create the [String] as in your example, you just
        have to write:<br>
        <br>
        let names = ["x"++ show i | i <- [0..w-1]]<br>
        varnames <- mallocList names<br>
        <br>
        -Sylvain<br>
      </div>
      <div class="gmail_extra">
        <br>
        <br>
        <div class="gmail_quote">2014-04-29 15:40 GMT+02:00 Lamine <span
            dir="ltr"><<a moz-do-not-send="true"
              href="mailto:mohamadoulamine@gmail.com" target="_blank">mohamadoulamine@gmail.com</a>></span>:<br>
          <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
            0.8ex; border-left: 1px solid rgb(204, 204, 204);
            padding-left: 1ex;">
            <div bgcolor="#ffffff" text="#000000"> Hi Sylvain,<br>
              thank you for your response! I try to use  this 2 lines<br>
              <br>
              allocaArray (w*n) $ \var -> do<br>
                                xs <- peekArray (w) var<br>
              to code <br>
              <div class=""> char **varnames = ccl_new_array (char *,
                w);<br>
                <br>
              </div>
              but it return [CString] not a [String]
              <div>
                <div class="h5"><br>
                  On 04/29/2014 01:58 PM, Sylvain Henry wrote:
                  <blockquote type="cite">
                    <div dir="ltr">Hi,<br>
                      <br>
                      "varnames" is an array of pointers, you cannot
                      allocate it with mallocBytes (n*100).<br>
                      <br>
                      Try something like this (not tested):<br>
                      <br>
                      mallocList :: [String] -> IO (Ptr CString)<br>
                      mallocList xs = newArray =<< forM xs g<br>
                        where<br>
                          g x = do<br>
                             b <- mallocBytes 100<br>
                             pokeCString b x 99<br>
                             return b<br>
                      <br>
                      pokeCString :: CString -> String -> Int
                      -> IO () <br>
                      pokeCString dst value maxLen = withCStringLen
                      (take maxLen value) $ uncurry (copyArray dst)<br>
                      <br>
                      -Sylvain<br>
                    </div>
                    <div class="gmail_extra"><br>
                      <br>
                      <div class="gmail_quote">2014-04-29 13:11
                        GMT+02:00 Lamine <span dir="ltr"><<a
                            moz-do-not-send="true"
                            href="mailto:mohamadoulamine@gmail.com"
                            target="_blank">mohamadoulamine@gmail.com</a>></span>:<br>
                        <blockquote class="gmail_quote" style="margin:
                          0pt 0pt 0pt 0.8ex; border-left: 1px solid
                          rgb(204, 204, 204); padding-left: 1ex;"><br>
                          Hi,<br>
                          <br>
                          I want to do write this C code in haskell
                          code, but i have some pb:<br>
                          <br>
                          int w ;<br>
                          char **varnames = ccl_new_array (char *, w);<br>
                          <br>
                          int i;<br>
                                    for (i = 0; i < w; i++)<br>
                                      {<br>
                                        varnames[i] = ccl_new_array
                          (char, 100);<br>
                                        sprintf (varnames[i], "x%d", i);<br>
                                      }<br>
                          <br>
                          I try this code unsing mallocList to (<a
                            moz-do-not-send="true"
                            href="http://lpaste.net/report/712"
                            target="_blank">http://lpaste.net/report/712</a>):<br>
                          mallocList :: [CString] -> IO (Ptr CString)<br>
                          mallocList xs = do let n = Prelude.length xs<br>
                                             p <- mallocBytes (n*100)<br>
                                             forM_ (Prelude.zip [0..]
                          xs)<br>
                                              (uncurry (pokeByteOff p))<br>
                                             return p<br>
                          <br>
                          let n = sizeOf(undefined :: CString)<br>
                                     allocaArray w $ \var -> do<br>
                                            xs <- peekArray (w*n) var<br>
                                            varnames <- mallocList xs<br>
                          <br>
                          I have an error "segmentation fault(core
                          dumped)".<br>
                          can someone please help me? Thank you.<span><font
                              color="#888888"><br>
                              <br>
                              Lamine<br>
_______________________________________________<br>
                              FFI mailing list<br>
                              <a moz-do-not-send="true"
                                href="mailto:FFI@haskell.org"
                                target="_blank">FFI@haskell.org</a><br>
                              <a moz-do-not-send="true"
                                href="http://www.haskell.org/mailman/listinfo/ffi"
                                target="_blank">http://www.haskell.org/mailman/listinfo/ffi</a><br>
                            </font></span></blockquote>
                      </div>
                      <br>
                    </div>
                  </blockquote>
                  <br>
                  <br>
                </div>
              </div>
              <div class="">
                <div>-- <br>
                  « Chaque génération doit, dans un état relatif de
                  captivité, découvrir sa mission. Elle a le choix de la
                  remplir ou la trahir». Frantz Fanon </div>
              </div>
            </div>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
    <br>
    <div class="moz-signature">-- <br>
      « Chaque génération doit, dans un état relatif de captivité,
      découvrir sa mission. Elle a le choix de la remplir ou la trahir».
      Frantz Fanon
    </div>
  </body>
</html>