Martijn van Oosterhout wrote:
Please don't use "reply" to start new thread, thanks.

On Fri, Sep 08, 2006 at 05:55:44AM -0800, Poul Jensen wrote:
I need to fetch strings from a database with ECPG and then sort them in C. Here is one of my failed attempts:

<snip>
 varchar filenms[][maxlen]=NULL;

I think you need to reread the C manual as to the difference between
arrays and pointers. I'm don't know about ECPG, but I think your other
attempt, using "char**" was much closer to the mark.

It compiles ok, but I get garbage in variable filenms. If I change the declaration of filenms to:
 char **filenms=NULL;
the SQL query returns strings ok. But the strings have variable length, and I need to specify one length in qsort, so it won't work. Another

Since you're declaring a array of pointers to char, the width you have
to specify to qsort would be sizeof(char*). I think you can just use
the normal strcmp() function with qsort then.

Ofcourse, you could get the database to sort them for you...

Hope this helps,
I'm afraid it didn't for various reasons, but I appreciate you trying. What I ended up doing was simply declaring an extra array outside the SQL declare section:

char (*tmp)[maxlen];

Then allocate the required memory once known:

 if (( tmp = malloc(maxlen*nrec*sizeof(char)) ) == NULL) {
   fprintf(stderr,"Memory allocation failure\n");
   exit(-1);
 }

and then just copy the strings into it one by one. As for strcmp it *can* be used directly in qsort, but not without some manipulation:

qsort(tmp, nrec, maxlen*sizeof(char), (int(*)(const void*, const void*))&strcmp);

This resolved my issues. For now. ;-)

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
      subscribe-nomail command to [EMAIL PROTECTED] so that your
      message can get through to the mailing list cleanly

Reply via email to