--- Rick <[EMAIL PROTECTED]> wrote:

> I have a program I'm trying to write and can't
> figure out how to do 
> it the way I want.
> 
> To start with, I know I'll get a lot of "Don't use
> C, use C++" and 
> "your program will crash if you enter more than
> MAXSTRLN-1 
> characters" and "NEVER user fscanf()". This isn't
> production code. 
> It's a quick-and-dirty test harness.
> 
> I WANT to do this in C, not C++, (for now).
> I know that the char arrays are actually being
> passed by reference, 
> not by value.
> 
> So, can someone show me the proper way to reference
> the char arrays 
> within a function? Do I actually need to
> de-reference them?
> 
> Here is what I've written which is, obviously,
> wrong.
> 
> #include <stdio.h>
> #include <stdlib.h>
> 
> extern   void loadcArray(char [][], int);
> extern   void printcArray(char [][], int);
> 
> #define  MAXSTRLN 16
> 
> int main(int argc, char *argv[])
> {
>      int result;
>      char array2[5][MAXSTRLN] = {"string1",
> "String2", "String3", 
> "string4", "string5"};
>      int a2size = (sizeof(array2) / MAXSTRLN);
> 
>      loadcArray(array2, a2size);
>      printcArray(array2, a2size);
> 
>      system("PAUSE");
> 
>      return 0;
> }
> 
> 
> void loadcArray(char cArray[][], int alen)
> {
>           int ix;
>           char val[MAXSTRLN];
> 
>           for (ix = 0; ix < alen; ix++)
>           {
>               printf("Enter a string value for
> array[%d]: ", ix);
>               fscanf(stdin, "%s", val);
>               strncpy(cArray[ix][0], val,
> MAXSTRLN-1);
>           }
> 
>           printf("Finished loading %d values\n",
> ix);
> 
>           return;
> }
> 
> 
> void printcArray(char cArray[][], int alen)
> {
>       int ix;
> 
>       printf("\n");
>       for (ix = 0; ix < alen; ix++)
>       {
>           printf("Array[%d] = %s\n", ix,
> cArray[ix][0]);
>       }
> 
>       return;
> }
> 


In a two dimensional array the compiler needs to know
now many columns there are in order to calculate the
address of the elements at he beginning of each row.


You can do something like this :

#define ROW 10
#define COL 5

void somefunct(char data[ROW][COL]);

or

void somefunct(char data[][COL], int NumOfRows);

but this

void somefunct(char data[][]);

will not work in C.


You would think there would be a way to pass the
arrays dimension but C has no such feature.

Again when passing two dimensional array to function
in C you must at least specify the number of columns.









Mickey M.
Construction Partner Inc.
http://www.constructionpartner.com


 
____________________________________________________________________________________
Don't pick lemons.
See all the new 2007 cars at Yahoo! Autos.
http://autos.yahoo.com/new_cars.html 

Reply via email to