This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

pointer to array is killing me!!!

I'm having serious problem with the following code:

unsigned char code * Progtxtstring_ENG[] =
{
  "PROGRAM",
  "SYSTEM"
};
unsigned char code * pMenu;
//User selected English
pMenu = Progtxtstring_ENG;

//Why doesn't this work, it just get garbage out:
printf("%s",pMenu[0]);
// This line below works
printf("%s",Progtxtstring_SWE[0])
I'm converting my program to handle selection of multiple languages. I want to select what language to print by a integer.
But here I'm trying to point to the correct "pointerarray" that contains the language. (Progtxtstring_XXX for language XXX) But I can't get it right. I'm guessing I am messing with the data types. It's an Philips 80C552 with the latest compiler. Would really appritiate some help.

Parents
  • Why not just use a 2-dimensional array?

    Because true 2-dimensional arrays essentially don't exist in C? You can define arrays-of-arrays, sure, by you can't do very much with them that wouldn't silently turn them into a pointer-to-array.

    Or because he would need a dynamic array for this to work, with more than one unknown dimensions, found in some other place than the outer-most indexing level:

    char string_table[n_tables][/*unknown*/][/*unknown*/]

    which of course C doesn't support at all. The structure of those arrays shown here is actually quite sensible. It's just his pointer pMenu that was of the wrong type.

Reply
  • Why not just use a 2-dimensional array?

    Because true 2-dimensional arrays essentially don't exist in C? You can define arrays-of-arrays, sure, by you can't do very much with them that wouldn't silently turn them into a pointer-to-array.

    Or because he would need a dynamic array for this to work, with more than one unknown dimensions, found in some other place than the outer-most indexing level:

    char string_table[n_tables][/*unknown*/][/*unknown*/]

    which of course C doesn't support at all. The structure of those arrays shown here is actually quite sensible. It's just his pointer pMenu that was of the wrong type.

Children
  • "Or because he would need a dynamic array for this to work"

    Really?
    I'd assumed there'd be a fixed number of languages, and a fixed number of entries in each menu - especially as he's storing them in code space:

    char menu[NUM_LANGUAGES][NUM_ENTRIES]

  • "Because true 2-dimensional arrays essentially don't exist in C? You can define arrays-of-arrays, sure, by you can't do very much with them that wouldn't silently turn them into a pointer-to-array."

    But, surely, the same could be said of 1-dimensional arrays - you can't do much with them, either, that doesn't silently turn them into pointers?
    After all, the offset operator [] can be applied to any pointer - whether or not it was defined as an array!