[Python-Dev] Baffled by PyArg_ParseTupleAndKeywords modification (original) (raw)

Jeremy Hylton jeremy at alum.mit.edu
Fri Feb 10 18:06:21 CET 2006


It looks like a solution may be to define it as "const char * const *" rather than "const char **". I'll see if that works.

Jeremy

On 2/10/06, "Martin v. Löwis" <martin at v.loewis.de> wrote:

Jeremy Hylton wrote: > I admit that I'm also puzzled by Jack's specific question. I don't > understand why an array passed to PyArgParseTupleAndKeywords() would > need to be declared as const. I observed the problem in my initial > changes but didn't think very hard about the cause of the problem. > Perhaps someone with better C/C++ standards chops can explain.

Please take a look at this code: void foo(const char** x, const char*s) { x[0] = s; } void bar() { char *kwds[] = {0}; const char *s = "Text"; foo(kwds, s); kwds[0][0] = 't'; } If it was correct, you would be able to modify the const char array in the string literal, without any compiler errors. The assignment x[0] = s; is kosher, because you are putting a const char* into a const char* array, and the assigment kwds[0][0] = 't'; is ok, because you are modifying a char array. So the place where it has to fail is the passing of the pointer-pointer. Regards, Martin



More information about the Python-Dev mailing list