title: C char array from python string
body: <p>I have a list of strings in python which I'm trying to pass down to a C extension for character analysis. I've gotten so far as to have the list broken up into their individual string PyObjects. Next, I'm hoping to split these strings into their individual characters so that every string PyObject is now a corresponding C-type character array. I can't seem to figure out how to do this though.</p>
  
  <p>Here's what I have so far: Currently after building the .pyd file it will return a list of 1's as a filler to Python (so everything else works), I just don't know how to split a string PyObject into the C-type character array.</p>
  
  <pre><code>--- cExt.c ---
  
  #include &lt;Python.h&gt;
  #include &lt;stdio.h&gt;
  
  static int *CitemCheck(PyObject *commandString, int commandStringLength) {
  
      // HAALP
  
      //char* commandChars = (char*) malloc(commandStringLength*sizeof(char*));
  
      // char c[] = PyString_AsString("c", commandString);
      // printf("%c" , c);
      // printf("%s", PyString_AsString(commandString));
      // for (int i=0; i&lt;sizeof(commandChars)/sizeof(*commandChars); i++) {
      //     printf("%s", PyString_AsString(commandString));
      //     printf("%c", commandChars[i]);
      // }
      return 1; // TODO: RETURN PROPER RESULTANT
  }
  
  static PyObject *ClistCheck(PyObject *commandList, int commandListLength) {
  
      PyObject *results = PyList_New(commandListLength);
  
      for (int index = 0; index &lt; commandListLength; index++) {
          PyObject *commandString;
          commandString = PyList_GetItem(commandList, index);
          int commandStringLength = PyObject_Length(commandString);
  
          // CitemCheck should take string PyObject and its length as int
          int x = CitemCheck(commandString, commandStringLength);
  
          PyObject* pyItem = Py_BuildValue("i", x);
          PyList_SetItem(results, index, pyItem);
      }
      return results;
  }
  
  static PyObject *parseListCheck(PyObject *self, PyObject *args) {
      PyObject *commandList;
      int commandListLength;
  
      if (!PyArg_ParseTuple(args, "O", &amp;commandList)){
          return NULL;
      }
  
      commandListLength = PyObject_Length(commandList);
  
      return Py_BuildValue("O", ClistCheck(commandList, commandListLength));
  }
  
  static char listCheckDocs[] = 
      ""; // TODO: ADD DOCSTRING
  
  static PyMethodDef listCheck[] = {
   {"listCheck", (PyCFunction) parseListCheck, METH_VARARGS, listCheckDocs},
   {NULL,NULL,0,NULL}
  };
  
  static struct PyModuleDef DCE = {
      PyModuleDef_HEAD_INIT,
      "listCheck",
      NULL,
      -1,
      listCheck
  };
  
  PyMODINIT_FUNC PyInit_cExt(void){
      return PyModule_Create(&amp;DCE);
  }
  
  </code></pre>
  
  <p>for reference, my temporary extension build file:</p>
  
  <pre><code>--- _c_setup.py --- 
  (located in same folder as cExt.c)
  """
  to build C files, pass:
  
  python _c_setup.py build_ext --inplace clean --all
  
  in command prompt which is cd'd to the file's dierctory
  """
  import glob
  from setuptools import setup, Extension, find_packages
  from os import path
  
  here = path.abspath(path.dirname(__file__))
  files = [path.split(x)[1] for x in glob.glob(path.join(here, '**.c'))]
  
  extensions = [Extension(
      path.splitext(x)[0], [x]
  ) for x in files]
  
  setup(
      ext_modules = extensions,
  )
  </code></pre>